diff --git a/README.md b/README.md
index d33ea47b53c7a7e5c7ce323e9cf19f6d204f5680..df917966856946003f16bcc5ce3ce88d224eb31d 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,3 @@
-SiB-Auto
+This repository contains SiB4 scripts, preprocessing pipelines and templates for reading into Python for easy modification.
+
+Use in combination with the preprocessing pipeline in CTDAS/CTDAS.git
diff --git a/mpi/SiB4D b/mpi/SiB4D
new file mode 100755
index 0000000000000000000000000000000000000000..624ff663e8ce223fd3c3a89926fcd64017dc49dc
Binary files /dev/null and b/mpi/SiB4D differ
diff --git a/mpi/chmod_144 b/mpi/chmod_144
new file mode 100755
index 0000000000000000000000000000000000000000..5db58ca7353c228982ee724b158820f6a18e5ab3
--- /dev/null
+++ b/mpi/chmod_144
@@ -0,0 +1,8 @@
+chmod +x rename_namel_144
+chmod +x dir_make_144
+chmod +x dir_remove_144
+chmod +x ex_time_144
+chmod +x make_ex_dir_144
+chmod +x script_qsub.csh_144
+chmod +x sibcasa_script_144
+chmod +x script_cp_to_JET_ex_144
diff --git a/mpi/dir_files.py b/mpi/dir_files.py
new file mode 100644
index 0000000000000000000000000000000000000000..ec0f518237ab01985b5691d508dffa44527579ab
--- /dev/null
+++ b/mpi/dir_files.py
@@ -0,0 +1,17 @@
+'''
+show files in directory
+'''
+# Load libraries
+import glob
+
+import os
+import shutil
+import numpy as np
+
+dir = '/scratch/shared/kooij032/NRT/output_sib4_NRT_final/'
+
+# Load all files in directory
+flist = sorted(glob.glob(dir+'/*'))
+
+# Show file list
+print(flist)
diff --git a/mpi/dir_make_144 b/mpi/dir_make_144
new file mode 100755
index 0000000000000000000000000000000000000000..bb744f7e30acd7fbc4503d4d9419cb6bb8e93449
--- /dev/null
+++ b/mpi/dir_make_144
@@ -0,0 +1,147 @@
+rm -r /scratch/p274780/output_global_final2/global_*
+mkdir /scratch/p274780/output_global_final2/
+cd /scratch/p274780/output_global_final2/
+mkdir global_001
+mkdir global_002
+mkdir global_003
+mkdir global_004
+mkdir global_005
+mkdir global_006
+mkdir global_007
+mkdir global_008
+mkdir global_009
+mkdir global_010
+mkdir global_011
+mkdir global_012
+mkdir global_013
+mkdir global_014
+mkdir global_015
+mkdir global_016
+mkdir global_017
+mkdir global_018
+mkdir global_019
+mkdir global_020
+mkdir global_021
+mkdir global_022
+mkdir global_023
+mkdir global_024
+mkdir global_025
+mkdir global_026
+mkdir global_027
+mkdir global_028
+mkdir global_029
+mkdir global_030
+mkdir global_031
+mkdir global_032
+mkdir global_033
+mkdir global_034
+mkdir global_035
+mkdir global_036
+mkdir global_037
+mkdir global_038
+mkdir global_039
+mkdir global_040
+mkdir global_041
+mkdir global_042
+mkdir global_043
+mkdir global_044
+mkdir global_045
+mkdir global_046
+mkdir global_047
+mkdir global_048
+mkdir global_049
+mkdir global_050
+mkdir global_051
+mkdir global_052
+mkdir global_053
+mkdir global_054
+mkdir global_055
+mkdir global_056
+mkdir global_057
+mkdir global_058
+mkdir global_059
+mkdir global_060
+mkdir global_061
+mkdir global_062
+mkdir global_063
+mkdir global_064
+mkdir global_065
+mkdir global_066
+mkdir global_067
+mkdir global_068
+mkdir global_069
+mkdir global_070
+mkdir global_071
+mkdir global_072
+mkdir global_073
+mkdir global_074
+mkdir global_075
+mkdir global_076
+mkdir global_077
+mkdir global_078
+mkdir global_079
+mkdir global_080
+mkdir global_081
+mkdir global_082
+mkdir global_083
+mkdir global_084
+mkdir global_085
+mkdir global_086
+mkdir global_087
+mkdir global_088
+mkdir global_089
+mkdir global_090
+mkdir global_091
+mkdir global_092
+mkdir global_093
+mkdir global_094
+mkdir global_095
+mkdir global_096
+mkdir global_097
+mkdir global_098
+mkdir global_099
+mkdir global_100
+mkdir global_101
+mkdir global_102
+mkdir global_103
+mkdir global_104
+mkdir global_105
+mkdir global_106
+mkdir global_107
+mkdir global_108
+mkdir global_109
+mkdir global_110
+mkdir global_111
+mkdir global_112
+mkdir global_113
+mkdir global_114
+mkdir global_115
+mkdir global_116
+mkdir global_117
+mkdir global_118
+mkdir global_119
+mkdir global_120
+mkdir global_121
+mkdir global_122
+mkdir global_123
+mkdir global_124
+mkdir global_125
+mkdir global_126
+mkdir global_127
+mkdir global_128
+mkdir global_129
+mkdir global_130
+mkdir global_131
+mkdir global_132
+mkdir global_133
+mkdir global_134
+mkdir global_135
+mkdir global_136
+mkdir global_137
+mkdir global_138
+mkdir global_139
+mkdir global_140
+mkdir global_141
+mkdir global_142
+mkdir global_143
+mkdir global_144
diff --git a/mpi/dir_remove_144 b/mpi/dir_remove_144
new file mode 100755
index 0000000000000000000000000000000000000000..55cb662ebe24d663b892d98ff8e5485223ecdd0f
--- /dev/null
+++ b/mpi/dir_remove_144
@@ -0,0 +1,144 @@
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_001
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_002
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_003
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_004
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_005
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_006
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_007
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_008
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_009
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_010
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_011
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_012
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_013
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_014
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_015
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_016
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_017
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_018
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_019
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_020
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_021
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_022
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_023
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_024
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_025
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_026
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_027
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_028
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_029
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_030
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_031
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_032
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_033
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_034
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_035
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_036
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_037
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_038
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_039
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_040
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_041
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_042
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_043
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_044
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_045
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_046
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_047
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_048
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_049
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_050
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_051
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_052
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_053
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_054
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_055
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_056
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_057
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_058
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_059
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_060
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_061
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_062
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_063
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_064
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_065
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_066
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_067
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_068
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_069
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_070
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_071
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_072
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_073
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_074
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_075
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_076
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_077
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_078
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_079
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_080
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_081
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_082
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_083
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_084
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_085
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_086
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_087
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_088
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_089
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_090
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_091
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_092
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_093
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_094
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_095
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_096
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_097
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_098
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_099
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_100
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_101
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_102
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_103
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_104
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_105
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_106
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_107
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_108
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_109
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_110
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_111
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_112
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_113
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_114
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_115
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_116
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_117
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_118
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_119
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_120
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_121
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_122
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_123
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_124
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_125
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_126
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_127
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_128
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_129
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_130
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_131
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_132
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_133
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_134
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_135
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_136
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_137
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_138
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_139
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_140
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_141
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_142
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_143
+rm -r /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_144
diff --git a/mpi/ex_time_144 b/mpi/ex_time_144
new file mode 100755
index 0000000000000000000000000000000000000000..0a4a9fb677423ac55fb9aead925caff83a35fb41
--- /dev/null
+++ b/mpi/ex_time_144
@@ -0,0 +1,576 @@
+echo 001
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_001
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 002
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_002
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 003
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_003
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 004
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_004
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 005
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_005
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 006
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_006
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 007
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_007
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 008
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_008
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 009
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_009
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 010
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_010
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 011
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_011
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 012
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_012
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 013
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_013
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 014
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_014
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 015
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_015
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 016
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_016
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 017
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_017
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 018
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_018
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 019
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_019
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 020
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_020
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 021
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_021
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 022
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_022
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 023
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_023
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 024
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_024
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 025
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_025
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 026
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_026
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 027
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_027
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 028
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_028
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 029
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_029
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 030
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_030
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 031
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_031
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 032
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_032
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 033
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_033
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 034
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_034
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 035
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_035
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 036
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_036
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 037
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_037
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 038
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_038
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 039
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_039
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 040
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_040
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 041
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_041
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 042
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_042
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 043
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_043
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 044
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_044
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 045
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_045
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 046
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_046
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 047
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_047
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 048
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_048
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 049
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_049
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 050
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_050
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 051
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_051
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 052
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_052
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 053
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_053
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 054
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_054
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 055
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_055
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 056
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_056
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 057
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_057
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 058
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_058
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 059
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_059
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 060
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_060
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 061
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_061
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 062
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_062
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 063
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_063
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 064
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_064
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 065
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_065
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 066
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_066
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 067
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_067
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 068
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_068
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 069
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_069
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 070
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_070
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 071
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_071
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 072
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_072
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 073
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_073
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 074
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_074
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 075
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_075
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 076
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_076
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 077
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_077
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 078
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_078
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 079
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_079
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 080
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_080
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 081
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_081
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 082
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_082
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 083
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_083
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 084
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_084
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 085
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_085
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 086
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_086
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 087
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_087
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 088
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_088
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 089
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_089
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 090
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_090
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 091
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_091
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 092
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_092
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 093
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_093
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 094
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_094
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 095
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_095
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 096
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_096
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 097
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_097
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 098
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_098
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 099
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_099
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 100
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_100
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 101
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_101
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 102
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_102
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 103
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_103
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 104
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_104
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 105
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_105
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 106
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_106
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 107
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_107
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 108
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_108
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 109
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_109
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 110
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_110
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 111
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_111
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 112
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_112
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 113
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_113
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 114
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_114
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 115
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_115
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 116
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_116
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 117
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_117
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 118
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_118
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 119
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_119
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 120
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_120
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 121
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_121
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 122
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_122
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 123
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_123
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 124
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_124
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 125
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_125
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 126
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_126
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 127
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_127
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 128
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_128
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 129
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_129
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 130
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_130
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 131
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_131
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 132
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_132
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 133
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_133
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 134
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_134
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 135
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_135
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 136
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_136
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 137
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_137
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 138
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_138
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 139
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_139
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 140
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_140
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 141
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_141
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 142
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_142
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 143
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_143
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
+echo 144
+cd /lfs0/projects/co2/ivar/MPI_run/RunOutput/global_144
+ls -al sib_r200012.nc
+ls -al sib_requib.nc
diff --git a/mpi/extract_equi.py b/mpi/extract_equi.py
new file mode 100644
index 0000000000000000000000000000000000000000..c0e025ad0e8ec85b7fbfa16ee003a3411e569a3d
--- /dev/null
+++ b/mpi/extract_equi.py
@@ -0,0 +1,60 @@
+##### Extract Equi ########
+'''
+Extract equilibrium files and copy them
+to new directory. This circumvents the problem
+that some cores achieve equilibrium earlier than
+other, and therefore the filesnames can be
+different.
+'''
+
+# Experiment name (without _spin or _final)
+exp_name = 'sib4_NRT'
+dir_name = '/scratch/shared/kooij032/NRT/'
+n_cores  = 288
+n_iter   = 10
+
+# Load libraries
+import glob
+import os
+import shutil
+import numpy as np
+
+# Move equip folder
+equip_dir = dir_name+'output_'+exp_name+'_spin_1850'
+shutil.move(equip_dir, equip_dir+ '_MOVE/')
+
+# Create new equip folder
+if not os.path.exists(equip_dir):
+    os.mkdir(equip_dir)
+
+# Load file list
+flist = sorted(glob.glob(equip_dir+'_MOVE/*'))
+
+# Initialize loop variables
+flist_id = 1
+eq_list = np.zeros(288, dtype=int)
+
+# Loop over all files and determine last equip file per core
+#print(len(flist))
+
+for i in range(len(flist)):
+    if flist[i][-9:-6] != "%03d" % (flist_id,):
+        eq_list[flist_id-1] = i-1
+        flist_id += 1
+
+# Make sure the last core is considered
+eq_list[flist_id-1] = len(flist) -1
+
+
+#print(len(flist) -1)
+#print(flist_id)
+#print(eq_list)
+
+# Copy last equip file to spin folder
+n_iter_str = 's' + "%02d" % (n_iter,) + '.nc'
+for i in range(288):
+    print(flist[eq_list[i]])
+    shutil.copyfile(flist[eq_list[i]], equip_dir+'/sib_requibp'+"%03d" % (i+1,)+n_iter_str)
+    print('FILE COPIED')
+    print('old: '+flist[eq_list[i]])
+    print('new: '+equip_dir+'/sib_requibp'+"%03d" % (i+1,)+n_iter_str)
diff --git a/mpi/io_namel.py b/mpi/io_namel.py
new file mode 100755
index 0000000000000000000000000000000000000000..544cdd2aa69e3c9c4fc2e3c2f32f08a08a72fd0a
--- /dev/null
+++ b/mpi/io_namel.py
@@ -0,0 +1,129 @@
+#!/usr/bin/env python
+# namel_io.py
+
+"""
+Author : Erik
+Original Author: Ivar
+Revision History:
+File created on 06 Oct 2010.
+Recoded to support SiB4 - Erik
+"""
+import shutil
+from numpy import *
+
+import os
+import glob
+
+num_outputdirs = 288
+path_ouput     = '/scratch/shared/awoude/'
+sim_name       = 'sib4_NRT'
+
+startyear = 1997 
+endyear   = 2020
+
+spin   = False
+n_spin = 10
+
+minlon = -15
+maxlon = 35
+minlat = 33
+maxlat = 72
+
+dtsibout = -1
+
+if spin == True:
+    outputname = 'output_'+sim_name+'_spin_1850'
+    execname   = 'ex_dir_'+sim_name+'_spin_1850'
+else:
+    outputname = 'output_'+sim_name+'_sim'  
+    execname   = 'ex_dir_'+sim_name+'_sim'  
+    #spinoutput = 'output_'+sim_name+'_spin_1850' 
+
+targdir = os.path.join(path_ouput,outputname)
+
+# Create output folder
+if not os.path.exists(targdir):
+    os.makedirs(targdir)
+
+path_exec = '/scratch/shared/awoude/'
+
+targdir = os.path.join(path_exec,execname)
+
+# Create folders to store executables
+if not os.path.exists(targdir):
+    os.makedirs(targdir)
+    for i in range(num_outputdirs):
+        targdir2= os.path.join(targdir,'case_%s'%(i+1))
+        if not os.path.exists(targdir2):
+            os.makedirs(targdir2)
+
+path ='/projects/0/ctdas/NRT/data/SiB/mpi'
+
+oldline = [''] * 12
+newline = [''] * 12
+
+orig_namelist = '/projects/0/ctdas/NRT/data/SiB/mpi/namel_sibdrv'
+
+# Create namelists for each thread
+for j in range(12):
+    for i in range(num_outputdirs):
+        i=i+1
+        if j==0:
+            shutil.copyfile(orig_namelist, '%s/namel_%s'%(path,i))
+        file = os.path.join(path,'namel_%s'%i)
+        
+        oldline[1]    ="   out_path = '/scratch/shared/awoude/"
+        newline[1]    ="   out_path= '/scratch/shared/awoude/%s/" %(outputname)
+
+        if spin == False:
+            oldline[2] ="   ic_file = '/projects/0/ctdas/sib4_input/requib/sib_requib2.nc"
+            newline[2] ="   ic_file = '/projects/0/ctdas/NRT/data/SiB/restart/sib_r199601p%s.nc" %(str(i).zfill(3))
+            #newline[2] ="   ic_file = '/scratch/shared/kooij032/NRT/%s/sib_requibp%ss%s.nc" %(spinoutput,str(i).zfill(3),str(n_spin).zfill(2))
+        
+        oldline[3]  ="   startyear      = 1998," 
+        newline[3]  ="   startyear      = %s,"%(str(startyear))
+        oldline[4]  ="   endyear        = 2010,"
+        newline[4]  ="   endyear        = %s,"%(str(endyear))
+        oldline[5]  ="   spinup         = .false.," 
+        newline[5]  ="   spinup         = .%s.,"%(str(spin).lower())
+        oldline[6]  ="   spinup_maxiter = 5,"
+        newline[6]  ="   spinup_maxiter = %s,"%(str(n_spin))
+        oldline[7]  ="   minlon = -180,"
+        newline[7]  ="   minlon = %s,"%(str(minlon))
+        oldline[8]  ="   maxlon = 180," 
+        newline[8]  ="   maxlon = %s,"%(str(maxlon)) 
+        oldline[9]  ="   minlat = -90," 
+        newline[9]  ="   minlat = %s,"%(str(minlat))
+        oldline[10] ="   maxlat = 90," 
+        newline[10] ="   maxlat = %s,"%(str(maxlat))
+        oldline[11] ="   dtsibqp        = -1,"
+        newline[11] ="   dtsibqp        = %s,"%(str(dtsibout))
+
+        # Read - write namelists
+        f = open(file, "r") 
+        text = f.read() 
+        f.close() 
+        f = open(file, "w") 
+        f.write(text.replace(oldline[j], newline[j])) 
+        f.close() 
+
+sib4_script_path = '/projects/0/ctdas/NRT/data/SiB/mpi/sib4_script'
+
+oldline = 'cd /scratch/shared/kooij032/NRT/ex_dir_global/case_${rank}'
+newline = 'cd /scratch/shared/awoude/'+execname+'/case_${rank}'
+
+# Change sib4_script
+f = open(sib4_script_path+'.template' , "r")
+text = f.read()
+f.close()
+f = open(sib4_script_path, "w")
+f.write(text.replace(oldline, newline))
+f.close()
+
+# Change sib4 permissions for mpi
+#os.chmod('/projects/0/ctdas/NRT/data/SiB/mpi/sib4_script', 0o777)
+
+print("All went well, the modifications are done")
+
+if __name__ == "__main__":
+    pass
diff --git a/mpi/make_ex_dir_144 b/mpi/make_ex_dir_144
new file mode 100755
index 0000000000000000000000000000000000000000..543f56cb505d5d0fb14822e59820dacb74247d52
--- /dev/null
+++ b/mpi/make_ex_dir_144
@@ -0,0 +1,147 @@
+rm -r ex_dir/
+mkdir /scratch/p274780/ex_dir
+cd /scratch/p274780/ex_dir
+mkdir case_1
+mkdir case_2
+mkdir case_3
+mkdir case_4
+mkdir case_5
+mkdir case_6
+mkdir case_7
+mkdir case_8
+mkdir case_9
+mkdir case_10
+mkdir case_11
+mkdir case_12
+mkdir case_13
+mkdir case_14
+mkdir case_15
+mkdir case_16
+mkdir case_17
+mkdir case_18
+mkdir case_19
+mkdir case_20
+mkdir case_21
+mkdir case_22
+mkdir case_23
+mkdir case_24
+mkdir case_25
+mkdir case_26
+mkdir case_27
+mkdir case_28
+mkdir case_29
+mkdir case_30
+mkdir case_31
+mkdir case_32
+mkdir case_33
+mkdir case_34
+mkdir case_35
+mkdir case_36
+mkdir case_37
+mkdir case_38
+mkdir case_39
+mkdir case_40
+mkdir case_41
+mkdir case_42
+mkdir case_43
+mkdir case_44
+mkdir case_45
+mkdir case_46
+mkdir case_47
+mkdir case_48
+mkdir case_49
+mkdir case_50
+mkdir case_51
+mkdir case_52
+mkdir case_53
+mkdir case_54
+mkdir case_55
+mkdir case_56
+mkdir case_57
+mkdir case_58
+mkdir case_59
+mkdir case_60
+mkdir case_61
+mkdir case_62
+mkdir case_63
+mkdir case_64
+mkdir case_65
+mkdir case_66
+mkdir case_67
+mkdir case_68
+mkdir case_69
+mkdir case_70
+mkdir case_71
+mkdir case_72
+mkdir case_73
+mkdir case_74
+mkdir case_75
+mkdir case_76
+mkdir case_77
+mkdir case_78
+mkdir case_79
+mkdir case_80
+mkdir case_81
+mkdir case_82
+mkdir case_83
+mkdir case_84
+mkdir case_85
+mkdir case_86
+mkdir case_87
+mkdir case_88
+mkdir case_89
+mkdir case_90
+mkdir case_91
+mkdir case_92
+mkdir case_93
+mkdir case_94
+mkdir case_95
+mkdir case_96
+mkdir case_97
+mkdir case_98
+mkdir case_99
+mkdir case_100
+mkdir case_101
+mkdir case_102
+mkdir case_103
+mkdir case_104
+mkdir case_105
+mkdir case_106
+mkdir case_107
+mkdir case_108
+mkdir case_109
+mkdir case_110
+mkdir case_111
+mkdir case_112
+mkdir case_113
+mkdir case_114
+mkdir case_115
+mkdir case_116
+mkdir case_117
+mkdir case_118
+mkdir case_119
+mkdir case_120
+mkdir case_121
+mkdir case_122
+mkdir case_123
+mkdir case_124
+mkdir case_125
+mkdir case_126
+mkdir case_127
+mkdir case_128
+mkdir case_129
+mkdir case_130
+mkdir case_131
+mkdir case_132
+mkdir case_133
+mkdir case_134
+mkdir case_135
+mkdir case_136
+mkdir case_137
+mkdir case_138
+mkdir case_139
+mkdir case_140
+mkdir case_141
+mkdir case_142
+mkdir case_143
+mkdir case_144
diff --git a/mpi/namel_sibdrv b/mpi/namel_sibdrv
new file mode 100644
index 0000000000000000000000000000000000000000..71e35e5a620faf46f1134cdcdeba0dabc6324987
--- /dev/null
+++ b/mpi/namel_sibdrv
@@ -0,0 +1,216 @@
+
+$CONTROL_LIST_SIBDRV
+   nsib           = 62521,
+   starttime      = 1,
+   startyear      = 2018,
+   endtime        = 31,
+   endyear        = 2018,
+   dtsib          = 600,
+   restart_dtsib  = -12,
+   qp_dtsib       = 3600,
+   pbp_dtsib      = 0,
+   hr_dtsib       = 0,
+/
+
+$IO_LIST_SIBDRV
+   pft_info  = '/projects/0/ctdas/NRT/data/SiB/sib4v2/input/params/info_pft.dat'
+   pool_info = '/projects/0/ctdas/NRT/data/SiB/sib4v2/input/params/info_pool.dat'
+   aero_file = '/projects/0/ctdas/NRT/data/SiB/sib4v2/input/params/sib_aero.nc'
+   pgdd_file = '/projects/0/ctdas/NRT/data/SiB/sib4v2/input/params/phen_gdd.dat'
+   pstg_file = '/projects/0/ctdas/NRT/data/SiB/sib4v2/input/params/phen_stg_EurDrought.dat'
+   phys_file = '/projects/0/ctdas/NRT/data/SiB/sib4v2/input/params/sib_phys_EurDrought.dat'
+   pool_file = '/projects/0/ctdas/NRT/data/SiB/sib4v2/input/params/sib_pool.dat'
+   vs_file = '/projects/0/ctdas/sib4_input/vs/sib_vs_0.5deg.nc'
+   ic_file = '/projects/0/ctdas/NRT/data/SiB//restart/sib_r199601p025.nc'
+   dr_path = '/projects/0/ctdas/awoude/NRT/input/merra2_0.5deg_'
+   tm5_path = '/projects/0/ctdas/linda/sib4_input/TM5MR/'
+   fr_path = '../../sib4_driver/global/gfed4/gfed4_0.5deg_'
+   out_path = '/scratch/shared/awoude//output_sib4_NRT_sim/'
+   out_info = '/projects/0/ctdas/NRT/data/SiB/sib4v2/input/sib_outopts_NRT'
+   out_rinfo= '/projects/0/ctdas/NRT/data/SiB/sib4v2/input/sibr_outopts'
+/
+
+$SPINUP_LIST_SIBDRV
+   spinup         = .false.,
+   spinup_default = .true.,
+   spinup_numyrs  = 1,
+   spinup_maxiter = 10,
+   spinup_threshold = 0.01,
+   spinup_writediag = .false.,
+   spinup_writetxtf = .false.,
+/
+
+$SUBGRID_SIBDRV
+   minlon = -15,
+   maxlon = 35,
+   minlat = 33,
+   maxlat = 72,
+/
+
+$PBP_LIST_SIBDRV
+   npbp = 0
+/
+-lon-, -lat-,
+/
+
+$BALAN_LIST_SIBDRV
+   badtc_print    = .false.,
+   badtc_stop     = .false.,
+   bnum_allow     = 10,
+   canb_print     = .false.,
+   canb_stop      = .false.,
+   canb_thresh    = 1.E-6,
+   carbonb_print  = .true.,
+   carbonb_stop   = .false.,
+   carbonb_thresh = 1.E-6,
+   fireb_print    = .false.,
+   fireb_stop     = .false.,
+   fireb_thresh   = 1.E-6,
+   snocmbn_print  = .false.,
+   snocmbn_stop   = .false.,
+   snocmbn_thresh = 1.E-6,
+   energyb_print  = .false.,
+   energyb_stop   = .true.,
+   energyb_thresh = 0.01,
+   waterb_print   = .false.,
+   waterb_stop    = .true.,
+   waterb_thresh  = 0.5,
+/
+
+$PRINT_LIST_SIBDRV
+   print_avec    = .false.,
+   print_driver  = .false.,
+   print_fire    = .false.,
+   print_harvest = .false.,
+   print_pftinfo = .false.,
+   print_pooll   = .false.,
+   print_soil    = .false.,
+   print_sscol   = .false.,
+   print_veg     = .false.,
+   print_stop    = .false.,
+/
+
+$SWITCH_LIST_SIBDRV
+   cornsoy_switch   = .false.,
+   fire_switch      = .false.,
+   grazing_switch   = .true.,
+   green_switch     = .true.,
+   eqclear_switch   = .true.,
+   leapyr_switch    = .false.,
+   updatelst_switch  = .true.,
+   tm5mr_switch     = .false.,
+   soilogee_switch  = .false.,
+/
+
+------------------------------------------------------------------------------
+  nsib      : number of points in simulation
+  starttime : day of year to start simulation
+  startyear : year to start simulation
+  endtime   : day of year to stop simulation
+  endyear   : year to stop simulation
+  dtsib     : prognostic time step, in seconds
+  dtsibrestart  : greater than zero implies units of seconds - restart output interval
+                  less than zero implies units of months - restart output interval
+  dtsibqp  : greater than zero implies units of seconds - QP output interval
+             less than zero implies units of months - QP output interval
+  dtsibpbp : greater than zero implies units of seconds - PBP output interval
+             less than zero implies units of months - PBP output interval
+  dtsibhr  : greater than zero implies units of seconds - HR output interval
+             less than zero implies units of months - HR output interval
+
+  pft_info  : File containing PFT information
+  pool_info : File containing pool information
+  aero_file : File containing aerodynamical parameters
+  pgdd_file : File containing GDD-based phenological parameters
+  pstg_file : File containing stage-based phenological parameters
+  pnvg_file : File containing non-vegetation parameters
+  phys_file : File containing physiological parameters
+  pool_file : File containing pool respiration/transfer parameters
+  vs_file   : File containing vegetation structure
+  ic_file   : File containing initial condition/restart values
+  dr_path   : Directory containing driver data
+  fr_path   : Directory containing fire emissions
+  out_path  : Directory for model output
+  out_info  : File containing output specification/information
+  out_rinfo : File containing restart specification/information
+
+  spinup    : Flag to perform a spinup simulation
+              ->simulation continues until either:
+                 -- pools are within threshold equilibrium values
+                 -- max number of iterations is met
+  spinup_default : Flag to use default initial conditions for spin-up run
+                    -- all pools zero except minimal froot
+                    -- soil moisture starts at saturation
+  spinup_numyrs  : Number of years in spinup run to run before calculating equilibrium pools
+  spinup_maxiter : Number of interations in a spinup simulation
+  spinup_threshold: Input/output ratio threshold for 'spun-up'
+  spinup_writediag: Flag to follow output choices in spin-up run
+                      (false will only save equilibrium files)
+  spinup_writetxtf: Flag to write equilibrium pools to a text file
+
+  minlon : Minimum longitude for setting a subgrid
+  maxlon : Maximum longitude for setting a subgrid
+  minlat : Minimum latitude for setting a subgrid
+  maxlat : Maximum latitude for setting a subgrid
+
+  npbp : Number of PBP's to be saved
+          --corresponding lon/lat pairs (in degrees) are listed below npbp
+          --value of -1 will save all points
+
+  badtc_print    : print canopy temperatures?
+  badtc_stop     : stop for bad canopy temperatures?
+  bnum_allow     : number of allowable balance offenses (i4)
+  canb_print     : print canopy balance values?
+  canb_stop      : stop if canopy balance fails?
+  canb_thresh    : canopy balance threshold (r4)
+  carbonb_print  : print carbon balance information?
+  carbonb_stop   : stop if carbon balance fails?
+  carbonb_thres  : carbon balance threshold (r4)
+  fireb_print    : print fire balance information?
+  fireb_stop     : stop if fire balance fails?
+  fireb_thres    : fire balance threshold (r4)
+  snocmbn_print  : print snow combine information?
+  snocmbn_stop   : stop if snow combine water balance fails?
+  snocmbn_thresh : snow combine balance threshold (r4)
+  energyb_print  : print energy balance values?
+  energyb_stop   : stop if energy balance fails?
+  energyb_thresh : energy balance threshold (r4)
+  waterb_print   : print water balance values?
+  waterb_stop    : stop if water balance fails?
+  waterb_thresh  : water balance threshold (r4)
+
+  print_avec     : print avec/bvec values?
+  print_driver   : print driver data?
+  print_fire     : print fire emissions?
+  print_harvest  : print harvest information?
+  print_pftinfo  : print PFT information?
+  print_pooll    : print live pool values?
+  print_soil     ; print soil properties?
+  print_sscol    : print soil/snow layer info?
+  print_veg      : print vegetation values?
+  print_stop     : stop after printing information?
+
+  cornsoy_switch : Flag to annually alternate corn/soybeans
+  fire_switch    : Flag for fire emissions
+  grazing_switch : Flag for grazing
+  green_switch   : Flag to use greenness fraction
+  eqclear_switch : Flag to clear equilibrium variables
+                     at start of simulation
+  leapyr_switch  : Flag for using leap years (.F. == constant 365 days)
+  updatelst_switch: Flag to update carbon pools at 0 LST (rather than 0 GMT)
+
+=============================
+Julian Days (not leap year )
+  January    1 = 1
+  February   1 = 32
+  March      1 = 60
+  April      1 = 91
+  May        1 = 121
+  June       1 = 152
+  July       1 = 182
+  August     1 = 213
+  September  1 = 244
+  October    1 = 274
+  November   1 = 305
+  December   1 = 335
+=============================
diff --git a/mpi/namel_sibdrv.copy b/mpi/namel_sibdrv.copy
new file mode 100644
index 0000000000000000000000000000000000000000..6cd4d53417c2232c9a31c8e8064e0d4b836fabe6
--- /dev/null
+++ b/mpi/namel_sibdrv.copy
@@ -0,0 +1,216 @@
+
+$CONTROL_LIST_SIBDRV
+   nsib           = 62521,
+   starttime      = 1,
+   startyear      = 1998,
+   endtime        = 365,
+   endyear        = 2010,
+   dtsib          = 600,
+   restart_dtsib  = -12,
+   qp_dtsib       = 10800,
+   pbp_dtsib      = 0,
+   hr_dtsib       = 0,
+/
+
+$IO_LIST_SIBDRV
+   pft_info  = '/projects/0/ctdas/NRT/data/SiB/sib4v2/input/params/info_pft.dat'
+   pool_info = '/projects/0/ctdas/NRT/data/SiB/sib4v2/input/params/info_pool.dat'
+   aero_file = '/projects/0/ctdas/NRT/data/SiB/sib4v2/input/params/sib_aero.nc'
+   pgdd_file = '/projects/0/ctdas/NRT/data/SiB/sib4v2/input/params/phen_gdd.dat'
+   pstg_file = '/projects/0/ctdas/NRT/data/SiB/sib4v2/input/params/phen_stg_EurDrought.dat'
+   phys_file = '/projects/0/ctdas/NRT/data/SiB/sib4v2/input/params/sib_phys_EurDrought.dat'
+   pool_file = '/projects/0/ctdas/NRT/data/SiB/sib4v2/input/params/sib_pool.dat'
+   vs_file = '/projects/0/ctdas/sib4_input/vs/sib_vs_0.5deg.nc'
+   ic_file = '/projects/0/ctdas/sib4_input/requib/sib_requib2.nc'
+   dr_path = '/projects/0/ctdas/sib4_input/meteo/merra/merra2_0.5deg_'
+   tm5_path = '/projects/0/ctdas/linda/sib4_input/TM5MR/'
+   fr_path = '../../sib4_driver/global/gfed4/gfed4_0.5deg_'
+   out_path = '/scratch/shared/rdkok/NRT/'
+   out_info = '/projects/0/ctdas/NRT/data/SiB/sib4v2/input/sib_outopts_NRT'
+   out_rinfo= '/projects/0/ctdas/NRT/data/SiB/sib4v2/input/sibr_outopts'
+/
+
+$SPINUP_LIST_SIBDRV
+   spinup         = .false.,
+   spinup_default = .true.,
+   spinup_numyrs  = 1,
+   spinup_maxiter = 10,
+   spinup_threshold = 0.01,
+   spinup_writediag = .false.,
+   spinup_writetxtf = .false.,
+/
+
+$SUBGRID_SIBDRV
+   minlon = -180,
+   maxlon = 180,
+   minlat = -90,
+   maxlat = 90,
+/
+
+$PBP_LIST_SIBDRV
+   npbp = 0
+/
+-lon-, -lat-,
+/
+
+$BALAN_LIST_SIBDRV
+   badtc_print    = .false.,
+   badtc_stop     = .false.,
+   bnum_allow     = 10,
+   canb_print     = .false.,
+   canb_stop      = .false.,
+   canb_thresh    = 1.E-6,
+   carbonb_print  = .false.,
+   carbonb_stop   = .false.,
+   carbonb_thresh = 1.E-6,
+   fireb_print    = .false.,
+   fireb_stop     = .false.,
+   fireb_thresh   = 1.E-6,
+   snocmbn_print  = .false.,
+   snocmbn_stop   = .false.,
+   snocmbn_thresh = 1.E-6,
+   energyb_print  = .false.,
+   energyb_stop   = .true.,
+   energyb_thresh = 0.01,
+   waterb_print   = .false.,
+   waterb_stop    = .true.,
+   waterb_thresh  = 0.5,
+/
+
+$PRINT_LIST_SIBDRV
+   print_avec    = .false.,
+   print_driver  = .false.,
+   print_fire    = .false.,
+   print_harvest = .false.,
+   print_pftinfo = .false.,
+   print_pooll   = .false.,
+   print_soil    = .false.,
+   print_sscol   = .false.,
+   print_veg     = .false.,
+   print_stop    = .false.,
+/
+
+$SWITCH_LIST_SIBDRV
+   cornsoy_switch   = .false.,
+   fire_switch      = .false.,
+   grazing_switch   = .true.,
+   green_switch     = .true.,
+   eqclear_switch   = .true.,
+   leapyr_switch    = .false.,
+   updatelst_switch  = .true.,
+   tm5mr_switch     = .false.,
+   soilogee_switch  = .false.,
+/
+
+------------------------------------------------------------------------------
+  nsib      : number of points in simulation
+  starttime : day of year to start simulation
+  startyear : year to start simulation
+  endtime   : day of year to stop simulation
+  endyear   : year to stop simulation
+  dtsib     : prognostic time step, in seconds
+  dtsibrestart  : greater than zero implies units of seconds - restart output interval
+                  less than zero implies units of months - restart output interval
+  dtsibqp  : greater than zero implies units of seconds - QP output interval
+             less than zero implies units of months - QP output interval
+  dtsibpbp : greater than zero implies units of seconds - PBP output interval
+             less than zero implies units of months - PBP output interval
+  dtsibhr  : greater than zero implies units of seconds - HR output interval
+             less than zero implies units of months - HR output interval
+
+  pft_info  : File containing PFT information
+  pool_info : File containing pool information
+  aero_file : File containing aerodynamical parameters
+  pgdd_file : File containing GDD-based phenological parameters
+  pstg_file : File containing stage-based phenological parameters
+  pnvg_file : File containing non-vegetation parameters
+  phys_file : File containing physiological parameters
+  pool_file : File containing pool respiration/transfer parameters
+  vs_file   : File containing vegetation structure
+  ic_file   : File containing initial condition/restart values
+  dr_path   : Directory containing driver data
+  fr_path   : Directory containing fire emissions
+  out_path  : Directory for model output
+  out_info  : File containing output specification/information
+  out_rinfo : File containing restart specification/information
+
+  spinup    : Flag to perform a spinup simulation
+              ->simulation continues until either:
+                 -- pools are within threshold equilibrium values
+                 -- max number of iterations is met
+  spinup_default : Flag to use default initial conditions for spin-up run
+                    -- all pools zero except minimal froot
+                    -- soil moisture starts at saturation
+  spinup_numyrs  : Number of years in spinup run to run before calculating equilibrium pools
+  spinup_maxiter : Number of interations in a spinup simulation
+  spinup_threshold: Input/output ratio threshold for 'spun-up'
+  spinup_writediag: Flag to follow output choices in spin-up run
+                      (false will only save equilibrium files)
+  spinup_writetxtf: Flag to write equilibrium pools to a text file
+
+  minlon : Minimum longitude for setting a subgrid
+  maxlon : Maximum longitude for setting a subgrid
+  minlat : Minimum latitude for setting a subgrid
+  maxlat : Maximum latitude for setting a subgrid
+
+  npbp : Number of PBP's to be saved
+          --corresponding lon/lat pairs (in degrees) are listed below npbp
+          --value of -1 will save all points
+
+  badtc_print    : print canopy temperatures?
+  badtc_stop     : stop for bad canopy temperatures?
+  bnum_allow     : number of allowable balance offenses (i4)
+  canb_print     : print canopy balance values?
+  canb_stop      : stop if canopy balance fails?
+  canb_thresh    : canopy balance threshold (r4)
+  carbonb_print  : print carbon balance information?
+  carbonb_stop   : stop if carbon balance fails?
+  carbonb_thres  : carbon balance threshold (r4)
+  fireb_print    : print fire balance information?
+  fireb_stop     : stop if fire balance fails?
+  fireb_thres    : fire balance threshold (r4)
+  snocmbn_print  : print snow combine information?
+  snocmbn_stop   : stop if snow combine water balance fails?
+  snocmbn_thresh : snow combine balance threshold (r4)
+  energyb_print  : print energy balance values?
+  energyb_stop   : stop if energy balance fails?
+  energyb_thresh : energy balance threshold (r4)
+  waterb_print   : print water balance values?
+  waterb_stop    : stop if water balance fails?
+  waterb_thresh  : water balance threshold (r4)
+
+  print_avec     : print avec/bvec values?
+  print_driver   : print driver data?
+  print_fire     : print fire emissions?
+  print_harvest  : print harvest information?
+  print_pftinfo  : print PFT information?
+  print_pooll    : print live pool values?
+  print_soil     ; print soil properties?
+  print_sscol    : print soil/snow layer info?
+  print_veg      : print vegetation values?
+  print_stop     : stop after printing information?
+
+  cornsoy_switch : Flag to annually alternate corn/soybeans
+  fire_switch    : Flag for fire emissions
+  grazing_switch : Flag for grazing
+  green_switch   : Flag to use greenness fraction
+  eqclear_switch : Flag to clear equilibrium variables
+                     at start of simulation
+  leapyr_switch  : Flag for using leap years (.F. == constant 365 days)
+  updatelst_switch: Flag to update carbon pools at 0 LST (rather than 0 GMT)
+
+=============================
+Julian Days (not leap year )
+  January    1 = 1
+  February   1 = 32
+  March      1 = 60
+  April      1 = 91
+  May        1 = 121
+  June       1 = 152
+  July       1 = 182
+  August     1 = 213
+  September  1 = 244
+  October    1 = 274
+  November   1 = 305
+  December   1 = 335
+=============================
diff --git a/mpi/namel_sibdrv.template b/mpi/namel_sibdrv.template
new file mode 100644
index 0000000000000000000000000000000000000000..376a7e3dcefe8d28ec4ccb1908a34d1104318f90
--- /dev/null
+++ b/mpi/namel_sibdrv.template
@@ -0,0 +1,216 @@
+
+$CONTROL_LIST_SIBDRV
+   nsib           = 62521,
+   starttime      = {start_doy},
+   startyear      = {startyear},
+   endtime        = {end_doy},
+   endyear        = {endyear},
+   dtsib          = 600,
+   restart_dtsib  = -12,
+   qp_dtsib       = 3600,
+   pbp_dtsib      = 0,
+   hr_dtsib       = 0,
+/
+
+$IO_LIST_SIBDRV
+   pft_info  = '/projects/0/ctdas/NRT/data/SiB/sib4v2/input/params/info_pft.dat'
+   pool_info = '/projects/0/ctdas/NRT/data/SiB/sib4v2/input/params/info_pool.dat'
+   aero_file = '/projects/0/ctdas/NRT/data/SiB/sib4v2/input/params/sib_aero.nc'
+   pgdd_file = '/projects/0/ctdas/NRT/data/SiB/sib4v2/input/params/phen_gdd.dat'
+   pstg_file = '/projects/0/ctdas/NRT/data/SiB/sib4v2/input/params/phen_stg_EurDrought.dat'
+   phys_file = '/projects/0/ctdas/NRT/data/SiB/sib4v2/input/params/sib_phys_EurDrought.dat'
+   pool_file = '/projects/0/ctdas/NRT/data/SiB/sib4v2/input/params/sib_pool.dat'
+   vs_file = '/projects/0/ctdas/sib4_input/vs/sib_vs_0.5deg.nc'
+   ic_file = '/projects/0/ctdas/NRT/data/SiB//restart/sib_r199601p{rank}.nc'
+   dr_path = '{merrapath}/merra2_0.5deg_'
+   tm5_path = '/projects/0/ctdas/linda/sib4_input/TM5MR/'
+   fr_path = '../../sib4_driver/global/gfed4/gfed4_0.5deg_'
+   out_path = '{outputpath}/output_sib4_NRT_sim/'
+   out_info = '/projects/0/ctdas/NRT/data/SiB/sib4v2/input/sib_outopts_NRT'
+   out_rinfo= '/projects/0/ctdas/NRT/data/SiB/sib4v2/input/sibr_outopts'
+/
+
+$SPINUP_LIST_SIBDRV
+   spinup         = .false.,
+   spinup_default = .true.,
+   spinup_numyrs  = 1,
+   spinup_maxiter = 10,
+   spinup_threshold = 0.01,
+   spinup_writediag = .false.,
+   spinup_writetxtf = .false.,
+/
+
+$SUBGRID_SIBDRV
+   minlon = -15,
+   maxlon = 35,
+   minlat = 33,
+   maxlat = 72,
+/
+
+$PBP_LIST_SIBDRV
+   npbp = 0
+/
+-lon-, -lat-,
+/
+
+$BALAN_LIST_SIBDRV
+   badtc_print    = .false.,
+   badtc_stop     = .false.,
+   bnum_allow     = 10,
+   canb_print     = .false.,
+   canb_stop      = .false.,
+   canb_thresh    = 1.E-6,
+   carbonb_print  = .true.,
+   carbonb_stop   = .false.,
+   carbonb_thresh = 1.E-6,
+   fireb_print    = .false.,
+   fireb_stop     = .false.,
+   fireb_thresh   = 1.E-6,
+   snocmbn_print  = .false.,
+   snocmbn_stop   = .false.,
+   snocmbn_thresh = 1.E-6,
+   energyb_print  = .false.,
+   energyb_stop   = .true.,
+   energyb_thresh = 0.01,
+   waterb_print   = .false.,
+   waterb_stop    = .true.,
+   waterb_thresh  = 0.5,
+/
+
+$PRINT_LIST_SIBDRV
+   print_avec    = .false.,
+   print_driver  = .false.,
+   print_fire    = .false.,
+   print_harvest = .false.,
+   print_pftinfo = .false.,
+   print_pooll   = .false.,
+   print_soil    = .false.,
+   print_sscol   = .false.,
+   print_veg     = .false.,
+   print_stop    = .false.,
+/
+
+$SWITCH_LIST_SIBDRV
+   cornsoy_switch   = .false.,
+   fire_switch      = .false.,
+   grazing_switch   = .true.,
+   green_switch     = .true.,
+   eqclear_switch   = .true.,
+   leapyr_switch    = .false.,
+   updatelst_switch  = .true.,
+   tm5mr_switch     = .false.,
+   soilogee_switch  = .false.,
+/
+
+------------------------------------------------------------------------------
+  nsib      : number of points in simulation
+  starttime : day of year to start simulation
+  startyear : year to start simulation
+  endtime   : day of year to stop simulation
+  endyear   : year to stop simulation
+  dtsib     : prognostic time step, in seconds
+  dtsibrestart  : greater than zero implies units of seconds - restart output interval
+                  less than zero implies units of months - restart output interval
+  dtsibqp  : greater than zero implies units of seconds - QP output interval
+             less than zero implies units of months - QP output interval
+  dtsibpbp : greater than zero implies units of seconds - PBP output interval
+             less than zero implies units of months - PBP output interval
+  dtsibhr  : greater than zero implies units of seconds - HR output interval
+             less than zero implies units of months - HR output interval
+
+  pft_info  : File containing PFT information
+  pool_info : File containing pool information
+  aero_file : File containing aerodynamical parameters
+  pgdd_file : File containing GDD-based phenological parameters
+  pstg_file : File containing stage-based phenological parameters
+  pnvg_file : File containing non-vegetation parameters
+  phys_file : File containing physiological parameters
+  pool_file : File containing pool respiration/transfer parameters
+  vs_file   : File containing vegetation structure
+  ic_file   : File containing initial condition/restart values
+  dr_path   : Directory containing driver data
+  fr_path   : Directory containing fire emissions
+  out_path  : Directory for model output
+  out_info  : File containing output specification/information
+  out_rinfo : File containing restart specification/information
+
+  spinup    : Flag to perform a spinup simulation
+              ->simulation continues until either:
+                 -- pools are within threshold equilibrium values
+                 -- max number of iterations is met
+  spinup_default : Flag to use default initial conditions for spin-up run
+                    -- all pools zero except minimal froot
+                    -- soil moisture starts at saturation
+  spinup_numyrs  : Number of years in spinup run to run before calculating equilibrium pools
+  spinup_maxiter : Number of interations in a spinup simulation
+  spinup_threshold: Input/output ratio threshold for 'spun-up'
+  spinup_writediag: Flag to follow output choices in spin-up run
+                      (false will only save equilibrium files)
+  spinup_writetxtf: Flag to write equilibrium pools to a text file
+
+  minlon : Minimum longitude for setting a subgrid
+  maxlon : Maximum longitude for setting a subgrid
+  minlat : Minimum latitude for setting a subgrid
+  maxlat : Maximum latitude for setting a subgrid
+
+  npbp : Number of PBP's to be saved
+          --corresponding lon/lat pairs (in degrees) are listed below npbp
+          --value of -1 will save all points
+
+  badtc_print    : print canopy temperatures?
+  badtc_stop     : stop for bad canopy temperatures?
+  bnum_allow     : number of allowable balance offenses (i4)
+  canb_print     : print canopy balance values?
+  canb_stop      : stop if canopy balance fails?
+  canb_thresh    : canopy balance threshold (r4)
+  carbonb_print  : print carbon balance information?
+  carbonb_stop   : stop if carbon balance fails?
+  carbonb_thres  : carbon balance threshold (r4)
+  fireb_print    : print fire balance information?
+  fireb_stop     : stop if fire balance fails?
+  fireb_thres    : fire balance threshold (r4)
+  snocmbn_print  : print snow combine information?
+  snocmbn_stop   : stop if snow combine water balance fails?
+  snocmbn_thresh : snow combine balance threshold (r4)
+  energyb_print  : print energy balance values?
+  energyb_stop   : stop if energy balance fails?
+  energyb_thresh : energy balance threshold (r4)
+  waterb_print   : print water balance values?
+  waterb_stop    : stop if water balance fails?
+  waterb_thresh  : water balance threshold (r4)
+
+  print_avec     : print avec/bvec values?
+  print_driver   : print driver data?
+  print_fire     : print fire emissions?
+  print_harvest  : print harvest information?
+  print_pftinfo  : print PFT information?
+  print_pooll    : print live pool values?
+  print_soil     ; print soil properties?
+  print_sscol    : print soil/snow layer info?
+  print_veg      : print vegetation values?
+  print_stop     : stop after printing information?
+
+  cornsoy_switch : Flag to annually alternate corn/soybeans
+  fire_switch    : Flag for fire emissions
+  grazing_switch : Flag for grazing
+  green_switch   : Flag to use greenness fraction
+  eqclear_switch : Flag to clear equilibrium variables
+                     at start of simulation
+  leapyr_switch  : Flag for using leap years (.F. == constant 365 days)
+  updatelst_switch: Flag to update carbon pools at 0 LST (rather than 0 GMT)
+
+=============================
+Julian Days (not leap year )
+  January    1 = 1
+  February   1 = 32
+  March      1 = 60
+  April      1 = 91
+  May        1 = 121
+  June       1 = 152
+  July       1 = 182
+  August     1 = 213
+  September  1 = 244
+  October    1 = 274
+  November   1 = 305
+  December   1 = 335
+=============================
diff --git a/mpi/namel_sibdrv_v1 b/mpi/namel_sibdrv_v1
new file mode 100644
index 0000000000000000000000000000000000000000..1986f65abfc8971efd784cef54a0857d811ad979
--- /dev/null
+++ b/mpi/namel_sibdrv_v1
@@ -0,0 +1,208 @@
+
+$CONTROL_LIST_SIBDRV
+   nsib           = 62521,
+   starttime      = 1,
+   startyear      = 1998,
+   endtime        = 365,
+   endyear        = 2010,
+   dtsib          = 600,
+   dtsibrestart   = -12,
+   dtsibqp        = -1,
+   dtsibpbp       = 0,
+   dtsibhr        = 0,
+/
+
+$IO_LIST_SIBDRV
+pft_info  = '/home/kooij032/models/sib4_KH/input/params/info_pft.dat'
+pool_info = '/home/kooij032/models/sib4_KH/input/params/info_pool.dat'
+aero_file = '/home/kooij032/models/sib4_KH/input/params/sib_aero.nc'
+pgdd_file = '/home/kooij032/models/sib4_KH/input/params/phen_gdd.dat'
+pstg_file = '/home/kooij032/models/sib4_KH/input/params/phen_stg.dat'
+phys_file = '/home/kooij032/models/sib4_KH/input/params/sib_phys.dat'
+pool_file = '/home/kooij032/models/sib4_KH/input/params/sib_pool.dat'
+   vs_file = '/projects/0/ctdas/sib4_input/vs/sib_vs_0.5deg.nc'
+   ic_file = '/projects/0/ctdas/sib4_input/requib/sib_requib2.nc'
+   dr_path = '/projects/0/ctdas/sib4_input/meteo/merra/merra2_0.5deg_'
+   drvr_type = 'merra'
+   out_path = '/scratch/shared/kooij032/'
+   out_info = '/home/kooij032/models/sib4_KH/input/sib_outopts'
+   out_rinfo= '/home/kooij032/models/sib4_KH/input/sibr_outopts'
+/
+
+$SPINUP_LIST_SIBDRV
+     spinup         = .false.,
+     spinup_default = .true.,
+     spinup_output  = .false.,
+     spinup_numyrs  = 1,
+     spinup_maxiter = 5,
+     spinup_threshold = 0.05,
+/
+
+$SUBGRID_SIBDRV
+    minlon = -180,
+    maxlon = 180,
+    minlat = -90,
+    maxlat =  90,
+/
+
+$PBP_LIST_SIBDRV
+     npbp = 0
+/
+-lon-, -lat-,
+/
+
+$BALAN_LIST_SIBDRV
+   badtc_print    = .true.,
+   badtc_stop     = .false.,
+   bnum_allow     = 10,
+   canb_print     = .false.,
+   canb_stop      = .false.,
+   canb_thresh    = 1.E-6,
+   snocmbn_print  = .false.,
+   snocmbn_stop   = .false.,
+   snocmbn_thresh = 1.E-6
+   energyb_print  = .false.,
+   energyb_stop   = .true.,
+   energyb_thresh = 0.01,
+   waterb_print   = .false.,
+   waterb_stop    = .true.,
+   waterb_thresh  = 0.50,
+/
+
+$EQPOOL_LIST_SIBDRV
+   eqjump_limit  = .false.,
+   eqjump_thresh = 0.5,
+   eq_printf     = .false.,
+   eq_pfmol      = .false.,
+   eq_prints     = 10,
+   eq_psmol      = .false.,
+/
+
+$PRINT_LIST_SIBDRV
+   print_avec    = .false.,
+   print_driver  = .false.,
+   print_harvest = .false.,
+   print_pftinfo = .false.,
+   print_pooll   = .false.,
+   print_soil    = .false.,
+   print_sscol   = .false.,
+   print_veg     = .false.,
+   print_stop    = .true.,
+/
+
+$SWITCH_LIST_SIBDRV
+   cornsoy_switch   = .F.,
+   grazing_switch   = .T.,
+   green_switch     = .T.,
+   equibclear_switch = .T.,
+   leapyear_switch   = .F.,
+   updatelst_switch  = .T.,
+/
+
+------------------------------------------------------------------------------
+  nsib      : number of points in simulation
+  starttime : day of year to start simulation
+  startyear : year to start simulation
+  endtime   : day of year to stop simulation
+  endyear   : year to stop simulation
+  dtsib     : prognostic time step, in seconds
+  dtsibrestart  : greater than zero implies units of seconds - restart output interval
+                  less than zero implies units of months - restart output interval
+  dtsibqp  : greater than zero implies units of seconds - QP output interval
+             less than zero implies units of months - QP output interval
+  dtsibpbp : greater than zero implies units of seconds - PBP output interval
+             less than zero implies units of months - PBP output interval
+  dtsibhr  : greater than zero implies units of seconds - HR output interval
+             less than zero implies units of months - HR output interval
+
+  pft_info  : File containing PFT information
+  pool_info : File containing pool information
+  aero_file : File containing aerodynamical parameters
+  phys_file : File containing physiological parameters
+  phen_file : File containing phenological parameters
+  pool_file : File containing pool transfer parameters
+  vs_file   : File containing vegetation structure
+  ic_file   : File containing initial condition/restart values
+  dr_path   : Directory containing driver data
+  drvr_type : Driver data type, choosen from:
+              -> ncep, nceps,
+                 merra, merras, tower, towerhr, towerlba
+  out_path : Directory for model output
+  out_info : File containing output specification/information
+  out_rinfo: File containing restart specification/information
+
+  spinup    : Flag to perform a spinup simulation
+              ->simulation continues until either:
+                 -- pools are within threshold equilibrium values
+                 -- max number of iterations is met
+  spinup_default : Flag to use default initial conditions for spin-up run
+                    -- all pools zero except minimal froot
+                    -- soil moisture starts at saturation
+  spinup_output  : Flag to follow output choices in spin-up run
+                      (false will only save equilibrium files)
+  spinup_numyrs  : Number of years in spinup run to run before calculating equilibrium pools
+  spinup_maxiter : Number of interations in a spinup simulation
+  spinup_threshold: Threshold of the input/output ratio for pools to be considered 'spun-up'
+
+  minlon : Minimum longitude for setting a subgrid
+  maxlon : Maximum longitude for setting a subgrid
+  minlat : Minimum latitude for setting a subgrid
+  maxlat : Maximum latitude for setting a subgrid
+
+  npbp : Number of PBP's to be saved
+          --corresponding lon/lat pairs (in degrees) are listed below npbp
+          --value of -1 will save all points
+
+  badtc_print    : print canopy temperatures?
+  badtc_stop     : stop for bad canopy temperatures?
+  bnum_allow     : number of allowable balance offenses (i4)
+  canb_print     : print canopy balance values?
+  canb_stop      : stop if canopy balance fails?
+  canb_thresh    : canopy balance threshold (r4)
+  energyb_print  : print energy balance values?
+  energyb_stop   : stop if energy balance fails?
+  energyb_thresh : energy balance threshold (r4)
+  waterb_print   : print water balance values?
+  waterb_stop    : stop if water balance fails?
+  waterb_thresh  : water balance threshold (r4)
+
+  eqjump_limit   : limit jump of equilibrium values?
+  eqjump_thresh  : jump fraction of eq pool values (r4)
+  eq_printf      : print equilibrium pools to a file?
+  eq_pfmol       : print file eq pools in moles C? (vs Mg C)
+  eq_prints      : number of eq pools to print to screen (i4)
+  eq_psmol       : print screen eq pools in moles C? (vs Mg C)
+
+  print_avec     : print avec/bvec values?
+  print_driver   : print driver data?
+  print_harvest  : print harvest information?
+  print_pftinfo  : print PFT information?
+  print_pooll    : print live pool values?
+  print_soil     ; print soil properties?
+  print_sscol    : print soil/snow layer info?
+  print_veg      : print vegetation values?
+  print_stop     : stop after printing info?
+
+  cornsoy_switch   : Flag to annually alternate corn/soybeans
+  grazing_switch   : Flag for grazing
+  green_switch     : Flag to use greenness fraction
+  equibclear_switch : Flag to clear equilibrium calculation variables
+                      at start of simulation
+  leapyear_switch   : Flag for using leap years (.F. == constant 365 days)
+  updatelst_switch  : Flag to update carbon pools at 0 LST (rather than 0 GMT)
+
+=============================
+Julian Days (not leap year )
+  January    1 = 1
+  February   1 = 32
+  March      1 = 60
+  April      1 = 91
+  May        1 = 121
+  June       1 = 152
+  July       1 = 182
+  August     1 = 213
+  September  1 = 244
+  October    1 = 274
+  November   1 = 305
+  December   1 = 335
+=============================
diff --git a/mpi/script_cp_to_JET_ex_144 b/mpi/script_cp_to_JET_ex_144
new file mode 100755
index 0000000000000000000000000000000000000000..1e22932d6f53155bfd2bcff7ca89b9ba0e370141
--- /dev/null
+++ b/mpi/script_cp_to_JET_ex_144
@@ -0,0 +1,3 @@
+cd /home/schaefer/JET_ex/
+cp /lfs0/projects/co2/ivar/MPI_run/ECMWF_1x1_ivar/script_qsub.csh_144 sibcasa_qsub.csh
+cp /lfs0/projects/co2/ivar/MPI_run/ECMWF_1x1_ivar/sibcasa_script_144 sibcasa_script
diff --git a/mpi/sib4_mpi_wrapper b/mpi/sib4_mpi_wrapper
new file mode 100755
index 0000000000000000000000000000000000000000..d895f785c8caeca88046224ce2b0c3916fde0b1e
Binary files /dev/null and b/mpi/sib4_mpi_wrapper differ
diff --git a/mpi/sib4_script b/mpi/sib4_script
new file mode 100755
index 0000000000000000000000000000000000000000..77e32f76108bb76fa91cba14ed8275c0fe11c7e1
--- /dev/null
+++ b/mpi/sib4_script
@@ -0,0 +1,17 @@
+#!/bin/csh -f
+
+if ( ${#argv} != 1 ) then
+    echo "[sib_script] Was expecting 1 argument, got ${#argv} instead."
+    exit -1
+endif
+set rank = ${1}
+@ rank=$rank + 1
+set now = `date`
+echo "[sib_script] rank ${rank} starting at ${now}"
+
+cd /scratch/shared/awoude/ex_dir_sib4_NRT_sim/case_${rank}
+cp /projects/0/ctdas/NRT/data/SiB//sib4v2/code/SiB4D .
+cp /projects/0/ctdas/NRT/data/SiB//mpi/namel_${rank} namel_sibdrv
+
+./SiB4D namel_sibdrv ${rank} 288 >df_${rank}
+
diff --git a/mpi/sib4_script.template b/mpi/sib4_script.template
new file mode 100755
index 0000000000000000000000000000000000000000..1094adb3c5295ef5b4738037accaaadd7644ca59
--- /dev/null
+++ b/mpi/sib4_script.template
@@ -0,0 +1,17 @@
+#!/bin/csh -f
+
+if ( ${{#argv}} != 1 ) then
+    echo "[sib_script] Was expecting 1 argument, got ${{#argv}} instead."
+    exit -1
+endif
+set rank = ${{1}}
+@ rank=$rank + 1
+set now = `date`
+echo "[sib_script] rank ${{rank}} starting at ${{now}}"
+
+cd {outdir}/case_${{rank}}
+cp {sibdir}/sib4v2/code/SiB4D .
+cp {sibdir}/mpi/namel_${{rank}} namel_sibdrv
+
+./SiB4D namel_sibdrv ${{rank}} 288 >df_${{rank}}
+
diff --git a/mpi/sibcasa_mpi_wrapper.c b/mpi/sibcasa_mpi_wrapper.c
new file mode 100644
index 0000000000000000000000000000000000000000..da66e1b0520e3a2374e5ec8459d635034f60b46b
--- /dev/null
+++ b/mpi/sibcasa_mpi_wrapper.c
@@ -0,0 +1,56 @@
+#include <stdio.h>
+#include <errno.h>
+#include <mpi.h>
+
+#define CMDLENGTH 200
+
+int safe_system (const char *command);
+
+int main(int argc, char *argv[]) { 
+
+  int ierr;
+  int myrank;
+  char cmd[CMDLENGTH];
+
+  ierr = MPI_Init(&argc, &argv);
+  if (argc != 2) {
+    fprintf(stderr, "[sibcasa_mpi_wrapper] Expecting 1 argument, got %d.\n",argc);
+    exit(-1);
+  }
+  MPI_Comm_rank(MPI_COMM_WORLD, &myrank);
+  snprintf(cmd,CMDLENGTH,"%s %d",argv[1],myrank);
+  printf( "MPI rank %d about to execute command \"%s\".\n",myrank,cmd );
+  safe_system(cmd);
+  ierr = MPI_Finalize(  );
+  exit(ierr);
+}
+
+
+
+
+
+int safe_system (const char *command) {
+  int pid, status;
+
+  if (command == 0)
+    return 1;
+  pid = fork();
+  if (pid == -1) // fork failed
+    return -1;
+  if (pid == 0) {  // then this is the child
+    char *argv[4];
+    argv[0] = "sh";
+    argv[1] = "-c";
+    argv[2] = (char*)command;
+    argv[3] = 0;
+    execv("/bin/sh", argv);
+    _exit(127);
+  }
+  do {
+    if (waitpid(pid, &status, 0) == -1) {
+      if (errno != EINTR)
+        return -1;
+    } else
+      return status;
+  } while(1);
+}
diff --git a/mpi/sibcasa_mpi_wrapper.o b/mpi/sibcasa_mpi_wrapper.o
new file mode 100644
index 0000000000000000000000000000000000000000..7cb88650ad387b2385c63fa7f8be301270e93837
Binary files /dev/null and b/mpi/sibcasa_mpi_wrapper.o differ
diff --git a/mpi/sibcasa_script_144 b/mpi/sibcasa_script_144
new file mode 100755
index 0000000000000000000000000000000000000000..62557bf1b5d4ec6dd012d34ad2e9ce86d25e02fd
--- /dev/null
+++ b/mpi/sibcasa_script_144
@@ -0,0 +1,15 @@
+#!/bin/csh -f
+
+if ( ${#argv} != 1 ) then
+    echo "[sibcasa_script] Was expecting 1 argument, got ${#argv} instead."
+    exit -1
+endif
+set rank = ${1}
+set now = `date`
+echo "[sibcasa_script] rank ${rank} starting at ${now}"
+
+cd /scratch/shared/erikvs/SiBCASA/mpi_scripts/ex_dir/case_${rank}
+cp /home/erikvs/Modeling/SiBCASA/SiBD3 .
+cp /scratch/shared/erikvs/SiBCASA/mpi_scripts/namel_${rank} namel_sibdrv
+#module switch intel pgi
+./SiBD3>df_${rank}
diff --git a/mpi/submit_sib4 b/mpi/submit_sib4
new file mode 100755
index 0000000000000000000000000000000000000000..44d25ce4f4cc18415578036c0d489c2598db3af0
--- /dev/null
+++ b/mpi/submit_sib4
@@ -0,0 +1,12 @@
+#!/bin/bash
+# 
+#SBATCH --nodes=12
+#SBATCH --ntasks-per-node=24
+#SBATCH --time=01:00:00
+#SBATCH -p short
+
+export I_MPI_USE_DYNAMIC_CONNECTIONS=0
+
+srun -n 288 /projects/0/ctdas/NRT/data/SiB/mpi/sib4_mpi_wrapper /projects/0/ctdas/NRT/data/SiB/mpi/sib4_script
+#srun -n 100 /home/erikvs/Modeling/mpi_sib4/sib4_mpi_wrapper /home/p274780/Modeling/mpi_sib4/sib4_script
+
diff --git a/preprocess/Makefile b/preprocess/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..8d7777918145ab43f9a28bb00ca25c64bfacbc7d
--- /dev/null
+++ b/preprocess/Makefile
@@ -0,0 +1,153 @@
+# Makefile for SiB4 MERRA Processing Tools
+#
+# You will need GNU's version of Make, 
+# which is the default on Linux, OS X
+# but not necessarily other Unixes.
+#
+# Prior to changing options, 
+# make sure to remove all object files
+# user@host: make clean
+#
+# Values for COMPILER: gcc
+ifndef COMPILER
+   COMPILER = gcc
+endif
+# Currently only uses gfortran.
+#
+# Values for OPT: debug, opt*
+ifndef OPT
+   OPT = opt
+endif
+# Optimized is the default,
+# but to change to debug, specify: 
+# user@host:make OPT=debug
+#
+#Values for NC: nc3, nc4
+ifndef NC
+   NC = 4
+endif
+# netcdf 4 is the default,
+# but to change to netcdf 3, specify:
+# user@host:make NC=3
+#
+# You can tell the Makefile where to find NetCDF libraries
+# by setting the NETCDF_ROOT environment variables as well:
+# user@host:~$ export NETCDF_ROOT=/usr/local
+#--------------------------------------------------------------
+# Directory containing netcdf's include/ and lib/ directories.
+ifndef NETCDF_ROOT
+  ifeq ($(NC),3)
+      NCROOT = /usr/local/netcdf3-$(COMPILER)
+      LIBS = -L$(NCROOT)/lib -lnetcdf
+  else
+      NCROOT = /projects/0/ctdas/NRT/data/SiB/privatemodules/nc4
+      H5ROOT = /projects/0/ctdas/NRT/data/SiB/privatemodules/nc4
+      LIBS = -L$(NCROOT)/lib -L$(H5ROOT)/lib -lhdf5_hl -lhdf5 -lnetcdff -lnetcdf
+  endif
+
+  DIREXIST = $(shell if test -d $(NCROOT); then echo yes; else echo no; fi)
+  ifeq ($(DIREXIST),no)
+       NCROOT = /projects/0/ctdas/NRT/data/SiB/privatemodules/nc4
+       H5ROOT = /projects/0/ctdas/NRT/data/SiB/privatemodules/nc4
+  endif
+
+else
+  NCROOT = $(NETCDF_ROOT)
+endif
+INCLUDES = -I$(NCROOT)/include
+
+##To check NCROOT and INCLUDES:
+#$(info $$NCROOT is [${NCROOT}])
+#$(info $$INCLUDES is [${INCLUDES}])
+
+ifeq ($(COMPILER),gcc)
+  F90 = gfortran
+#  F90 = ifort 
+  ifeq ($(OPT),opt)
+    F90FLAGS = -O2
+  else 
+    F90FLAGS = -g -Wall -Wuninitialized -fbounds-check \
+         -ffpe-trap=invalid,zero,overflow -fbacktrace -finit-real=nan
+  endif
+
+  ifeq ($(PROC),powerpc)
+    F90FLAGS += -fconvert=little-endian
+  endif
+
+  F90FLAGS += -fimplicit-none -Wsurprising $(INCLUDES)
+  LFLAGS = $(LIBS)
+endif
+##To check F90FLAGS:
+#$(info $$F90FLAGS is [${F90FLAGS}])
+
+#--------------------------------------------------------
+
+PROC_OBJS = \
+   gpcp_tdown.o \
+   gpcp_tup.o 
+
+DRV_OBJS = \
+   gpcp_regrid.o \
+   merra_pullsib_auto.o \
+   merra_pullvar_auto.o \
+   scale_merra_gpcp_auto.o
+
+#--------------------------------------------------------
+%.o: %.f90
+	$(F90) $(F90FLAGS) -c $< -o $@
+
+all: $(PROC_OBJS) $(DRV_OBJS)
+	@echo ""
+	$(F90) gpcp_regrid.o gpcp_tdown.o gpcp_tup.o -o gpcp_regrid $(LFLAGS) 
+	@echo Finished making == gpcp_regrid
+	@echo ""
+	$(F90) merra_pullsib_auto.o -o merra_pullsib_auto $(LFLAGS) 
+	@echo Finished making == merra_pullsib_auto
+	@echo ""
+	$(F90) merra_pullvar_auto.o -o merra_pullvar_auto $(LFLAGS) 
+	@echo Finished making == merra_pullvar_auto
+	@echo ""
+	$(F90) scale_merra_gpcp_auto.o -o scale_merra_auto $(LFLAGS) 
+	@echo Finished making == scale_merra_auto
+	@echo ""
+
+gpcp_regrid: gpcp_regrid.o gpcp_tdown.o gpcp_tup.o
+	$(F90) $^ -o gpcp_regrid $(LFLAGS)
+	@echo ""
+	@date
+	@echo Finished making == gpcp_regrid
+	@echo ""
+
+merra_pullvar_auto: merra_pullvar_auto.o
+	$(F90) $^ -o merra_pullvar_auto $(LFLAGS)
+	@echo ""
+	@date
+	@echo Finished making == merra_pullvar_auto
+	@echo ""
+
+merra_pullsib_auto: merra_pullsib_auto.o
+	$(F90) $^ -o merra_pullsib_auto $(LFLAGS)
+	@echo ""
+	@date
+	@echo Finished making == merra_pullsib_auto
+	@echo ""
+
+scale_merra_auto: scale_merra_gpcp_auto.o
+	$(F90) $^ -o scale_merra_auto $(LFLAGS)
+	@echo ""
+	@date
+	@echo Finished making == scale_merra_auto
+	@echo ""
+
+scale_merra_gpcp_auto: scale_merra_gpcp_auto.o
+	$(F90) $^ -o scale_merra_gpcp_auto $(LFLAGS)
+	@echo ""
+	@date
+	@echo Finished making == scale_merra_gpcp_auto
+	@echo ""
+
+clean:	
+	rm -f *.mod *~ *.o
+
+cleane:
+	rm -f gpcp_regrid merra_pullsib merra_pullvar_auto scale_merra
diff --git a/preprocess/README_merra b/preprocess/README_merra
new file mode 100644
index 0000000000000000000000000000000000000000..b61f3a373ca622f0b8dfd6f3ae7eb976f8760968
--- /dev/null
+++ b/preprocess/README_merra
@@ -0,0 +1,71 @@
+**********************************************************************
+*******************STEPS TO PROCESS MERRA2 DATA***********************
+
+--2/3-degree longitude by 1/2-degree latitude
+--hourly resolution
+--https://gmao.gsfc.nasa.gov/reanalysis/MERRA-2/
+--Gelero, R., McCarty, W., Suarez, M.J., Todling, R., Molod, A., 
+  Takacs, L., ..., Zhao, B. (2017).  The Modern-Era Restrospective
+  Analysis for Research and Applications, Version 2 (MERRA-2).  
+  J. Climate, 30, 5419-5454, https://doi:10.1175/JCLI-D-16-0758.1.
+
+1) Download the data 
+   --Use the script "getmerra"
+   --Edit script "getmerra" to specify:
+      > Output directory
+      > Year to download
+      > Month(s) to download
+   --Run "getmerra"
+
+2) Pull out the variables required
+     --Use the fortran program merra_pullvar.f90
+     --Edit the program to specify:
+       > Starting and stopping years and months
+       > Directory of original MERRA data
+       > Directory and prefix for files of selected MERRA data
+     --Compile (make merra_pullvar)
+     --Run merra_pullvar executable
+
+3) Scale the MERRA-2 precipitation to GPCP 
+   --Prepare the GPCP data
+     > Needs to be same spatial resolution as MERRA
+       and monthly total precipitation.
+     > To convert from 2.5-degrees and 
+       to calculate monthly totals from average daily rates,
+       use the fortran program gpcp_regrid.f90.
+
+   --Use the fortran program scale_merra_gpcp.f90
+   --Edit the program to specify:
+     > Starting and stopping years
+     > Starting and stopping months
+     > GPCP Precipitation File (Version 2.3)
+       ---Assumes GPCP data are in global, gridded files 
+          (same spatial resolution; month total precip (mm))
+     > Directory and prefix for the MERRA files
+   --Compile (make scale_merra)
+   --Run scale_merra executable
+
+4) Pull out the SiB points
+   --Use the fortran program merra_pullsib.f90
+   --Edit the program to specify:
+     > Starting and stopping years
+     > Starting and stopping months
+     > Directory and prefix for the global MERRA files
+        (gridded at 2/3-degree by 1/2-degree)
+     > Directory and prefix for the SiB4 MERRA files 
+        (vector of nsib points at 1/2-degree by 1/2-degree)
+     > Filename specifying the SiB4 gridpoints
+   --Compile (make merra_pullsib)
+   --Run merra_pullsib executable
+
+5) Check the results
+   --Use sib4plot
+   --Press the Driver Data button and either select a
+     single file or specify a time range.
+   --Once the file opens, select which variable to plot
+
+
+*********************************************************************
+Questions? Contact Kathy Haynes, kdhaynes@atmos.colostate.edu
+Last Modified: January, 2018
+*********************************************************************
diff --git a/preprocess/archiv/SiB4_PreProcessing_CarbonTracker.ipynb b/preprocess/archiv/SiB4_PreProcessing_CarbonTracker.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..3b3a5be47a112d1fdd6ff0582bfc140d77524948
--- /dev/null
+++ b/preprocess/archiv/SiB4_PreProcessing_CarbonTracker.ipynb
@@ -0,0 +1,205 @@
+{
+ "cells": [
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# Load libraries\n",
+    "#import numpy as np\n",
+    "#import pandas as pd\n",
+    "#import matplotlib.pyplot as plt\n",
+    "#import seaborn as sns\n",
+    "\n",
+    "import netCDF4 as nc\n",
+    "import sys\n",
+    "import glob\n",
+    "import os\n",
+    "\n",
+    "#import warnings\n",
+    "\n",
+    "#sns.set_style('white')\n",
+    "#%matplotlib inline\n",
+    "\n",
+    "outputdir = '/Users/lindakooijmans/Mounts/Scratch/SiB4v2_Biosphere_Fluxes/'\n",
+    "\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "sys.path.append('/Users/lindakooijmans/Documents/Python/Funcs/')\n",
+    "import sib4maptools as sibtools"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Check if files exist\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "\n",
+    "for yy in range(2010, 2020):\n",
+    "    for mm in range(1, 13):\n",
+    "        print(str(yy)+\"{:02}\".format(mm))\n",
+    "        filedir = '/Users/lindakooijmans/Mounts/Scratch/SiB4v2_Biosphere_Fluxes_GCP_v206/SiB4v2_BioFluxes_'+str(yy)+\"{:02}\".format(mm)+'.nc'\n",
+    "        if os.path.isfile(filedir):\n",
+    "            print(filedir)\n",
+    "        #files = glob.glob(filedir)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Convert lat-lon to 2d map and save as nc file"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "\n",
+    "for yy in range(2010, 2020): \n",
+    "    for mm in range(1, 13):\n",
+    "    \n",
+    "        ########################\n",
+    "        ###### Load Data #######\n",
+    "        ########################\n",
+    "        \n",
+    "        filedir = '/Users/lindakooijmans/Mounts/Scratch/output_merged/qsib_'+str(yy)+'{:02}'.format(mm)+'.g.qp2.nc'\n",
+    "        \n",
+    "        files = glob.glob(filedir)\n",
+    "        \n",
+    "        with nc.Dataset(files[0]) as d:\n",
+    "            time_orig = d['time'][:]\n",
+    "            lonsib_orig = d['lonsib'][:]\n",
+    "            latsib_orig = d['latsib'][:]\n",
+    "\n",
+    "            gpp_orig       = d['gpp'][:,:]\n",
+    "            nee_orig       = d['nee'][:,:]\n",
+    "            reco_orig      = d['reco'][:,:]\n",
+    "\n",
+    "        print(filedir+\"   loaded\")\n",
+    "        \n",
+    "        ##############################\n",
+    "        ###### Create new file #######\n",
+    "        ##############################\n",
+    "        \n",
+    "        newfiledir = outputdir+'SiB4v2_BioFluxes_'+str(yy)+'{:02}'.format(mm)+'.nc'\n",
+    "\n",
+    "        x = nc.Dataset(newfiledir,'w',format='NETCDF4')\n",
+    "\n",
+    "        # -- Create dimension\n",
+    "\n",
+    "        x.createDimension('latitude', 360)\n",
+    "        x.createDimension('longitude', 720)\n",
+    "        x.createDimension('time', len(time_orig))\n",
+    "\n",
+    "        # -- Create variables: Dataset.createVariable(<var_id>, <type>, <dimensions>)\n",
+    "        latsib = x.createVariable('latitude','f',('latitude'))\n",
+    "        lonsib = x.createVariable('longitude','f',('longitude'))\n",
+    "        time = x.createVariable('time','f',('time'))\n",
+    "        gpp = x.createVariable('gpp','f',('time','latitude', 'longitude'))\n",
+    "        reco = x.createVariable('reco','f',('time','latitude', 'longitude'))\n",
+    "        nee = x.createVariable('nee','f',('time','latitude', 'longitude'))\n",
+    "\n",
+    "        # -- Write array to file\n",
+    "        latsib[:] = np.arange(-89.75, 90.25, 0.5)\n",
+    "        lonsib[:] = np.arange(-179.75, 180.25, 0.5)\n",
+    "        time[:] = time_orig[:]\n",
+    "        gpp[:,:,:] = sibtools.convert_2d(gpp_orig, latsib_orig, lonsib_orig)\n",
+    "        reco[:,:,:] = sibtools.convert_2d(reco_orig, latsib_orig, lonsib_orig)\n",
+    "        nee[:,:,:] = sibtools.convert_2d(nee_orig, latsib_orig, lonsib_orig)\n",
+    "\n",
+    "        # -- Set attributes of variables\n",
+    "        latsib.setncattr('long_name','Latitude')\n",
+    "        lonsib.setncattr('long_name','Longitude')\n",
+    "        time.setncattr('unit','3-hourly time step')\n",
+    "        time.setncattr('long_name','time')\n",
+    "        gpp.setncattr('unit','micromol m-2 s-1')\n",
+    "        gpp.setncattr('long_name','Gross Primary Productivity')\n",
+    "        gpp.setncattr('comment','Positive values are a flux from the atmosphere to the biosphere')\n",
+    "        nee.setncattr('unit','micromol m-2 s-1')\n",
+    "        nee.setncattr('long_name','Net Ecosystem Exchange')\n",
+    "        nee.setncattr('comment','Positive values are a flux from the biosphere to the atmosphere')\n",
+    "        reco.setncattr('unit','micromol m-2 s-1')\n",
+    "        reco.setncattr('long_name','Total Ecosystem Respiration')\n",
+    "        reco.setncattr('comment','Positive values are a flux from the biosphere to the atmosphere')\n",
+    "\n",
+    "        # -- Set metadata\n",
+    "        # x.setncattr('creation_date',datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))\n",
+    "        x.setncattr('release_note','File created by Linda Kooijmans (Wageningen University)')\n",
+    "        x.setncattr('created','September, 2020')\n",
+    "\n",
+    "        # -- Close file\n",
+    "        x.close()\n",
+    "\n",
+    "        print(newfiledir+\"   created\")"
+   ]
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Python 3",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.6.8"
+  },
+  "varInspector": {
+   "cols": {
+    "lenName": 16,
+    "lenType": 16,
+    "lenVar": 40
+   },
+   "kernels_config": {
+    "python": {
+     "delete_cmd_postfix": "",
+     "delete_cmd_prefix": "del ",
+     "library": "var_list.py",
+     "varRefreshCmd": "print(var_dic_list())"
+    },
+    "r": {
+     "delete_cmd_postfix": ") ",
+     "delete_cmd_prefix": "rm(",
+     "library": "var_list.r",
+     "varRefreshCmd": "cat(var_dic_list()) "
+    }
+   },
+   "types_to_exclude": [
+    "module",
+    "function",
+    "builtin_function_or_method",
+    "instance",
+    "_Feature"
+   ],
+   "window_display": false
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/preprocess/archiv/getmerra b/preprocess/archiv/getmerra
new file mode 100755
index 0000000000000000000000000000000000000000..50cbae9c3db1a476b5bb86880a02ecffbef445e6
--- /dev/null
+++ b/preprocess/archiv/getmerra
@@ -0,0 +1,24 @@
+#!/bin/bash
+
+##User Information
+MDIR=/scratch/shared/nsmith/merra_orig/
+YR=2019
+MON=("08")
+##
+
+cd $MDIR
+
+for i in ${MON[*]}; do
+   mkdir ./$YR${i}
+   cd ./$YR${i}
+   echo $i
+#   wget -r -A.nc4 --cut-dirs=5 --load-cookies ~/.urs_cookies --save-cookies ~/.urs_cookies --auth-no-challenge=on --keep-session-cookies http://goldsmr4.gesdisc.eosdis.nasa.gov/data/MERRA2/M2T1NXFLX.5.12.4/$YR/${i}
+
+#   wget -r -A.nc4 --cut-dirs=5 --load-cookies ~/.urs_cookies --save-cookies ~/.urs_cookies --auth-no-challenge=on --keep-session-cookies http://goldsmr4.gesdisc.eosdis.nasa.gov/data/MERRA2/M2T1NXSLV.5.12.4/$YR/${i}
+
+#   wget -r -A.nc4 --cut-dirs=5 --load-cookies ~/.urs-cookies --save-cookies ~/.urs_cookies --auth-no-challenge=on --keep-session-cookies http://goldsmr4.gesdisc.eosdis.nasa.gov/data/MERRA2/M2T1NXRAD.5.12.4/$YR/${i}
+   wget -r -A.nc4 --auth-no-challenge=on http://goldsmr4.gesdisc.eosdis.nasa.gov/data/MERRA2/M2T1NXRAD.5.12.4/$YR/$i/
+   rm *.gif *.txt *.nc4.xml
+   cd ..
+done
+
diff --git a/preprocess/archiv/getmerra_auto b/preprocess/archiv/getmerra_auto
new file mode 100755
index 0000000000000000000000000000000000000000..6167ffda2d6a4a63c18aeaac46463dec159b6e3a
--- /dev/null
+++ b/preprocess/archiv/getmerra_auto
@@ -0,0 +1,27 @@
+#!/bin/bash
+
+##User Information
+MDIR=$4
+YR=$1
+MON=($2 $3)
+##
+
+echo $MDIR
+echo $YR
+echo $MON
+cd $MDIR
+
+for i in ${MON[@]}; do
+   mkdir ./$YR${i}
+   cd ./$YR${i}
+   echo 'Current month: '$i
+   #wget -r -A.nc4 --cut-dirs=5 --load-cookies ~/.urs_cookies --save-cookies ~/.urs_cookies --auth-no-challenge=on --keep-session-cookies http://goldsmr4.gesdisc.eosdis.nasa.gov/data/MERRA2/M2T1NXFLX.5.12.4/$YR/${i}
+
+   #wget -r -A.nc4 --cut-dirs=5 --load-cookies ~/.urs_cookies --save-cookies ~/.urs_cookies --auth-no-challenge=on --keep-session-cookies http://goldsmr4.gesdisc.eosdis.nasa.gov/data/MERRA2/M2T1NXSLV.5.12.4/$YR/${i}
+
+   wget -r -A.nc4 --cut-dirs=5 --load-cookies ~/.urs-cookies --save-cookies ~/.urs_cookies --auth-no-challenge=on --keep-session-cookies http://goldsmr4.gesdisc.eosdis.nasa.gov/data/MERRA2/M2T1NXRAD.5.12.4/$YR/${i}/
+
+   rm *.gif *.txt *.nc4.xml
+   cd ..
+done
+
diff --git a/preprocess/archiv/io_namel.py b/preprocess/archiv/io_namel.py
new file mode 100755
index 0000000000000000000000000000000000000000..2cd1d79032f403cedd967e4a7a8eb324a69bcebb
--- /dev/null
+++ b/preprocess/archiv/io_namel.py
@@ -0,0 +1,127 @@
+#!/usr/bin/env python
+# namel_io.py
+
+"""
+Author : Erik
+Original Author: Ivar
+Revision History:
+File created on 06 Oct 2010.
+Recoded to support SiB4 - Erik
+"""
+import shutil
+from numpy import *
+
+import os
+import glob
+
+num_outputdirs = 288
+path_output     = '/scratch/shared/awoude/'
+sibdir = '/projects/0/ctdas/NRT/data/SiB/'
+path_exec = sibdir + 'mpi/'
+sim_name       = 'sib4_NRT'
+
+startyear = 2018
+endyear   = 2018
+
+spin   = False
+n_spin = 10
+
+minlon = -15
+maxlon = 35
+minlat = 33
+maxlat = 72
+
+dtsibout = -1
+
+if spin == True:
+    outputname = 'output_'+sim_name+'_spin_1850'
+    execname   = 'ex_dir_'+sim_name+'_spin_1850'
+else:
+    outputname = 'output_'+sim_name+'_sim'  
+    execname   = 'ex_dir_'+sim_name+'_sim'  
+    #spinoutput = 'output_'+sim_name+'_spin_1850' 
+
+targdir = os.path.join(path_output, outputname)
+# Create output folder
+if not os.path.exists(targdir):
+    os.makedirs(targdir)
+
+
+targdir = os.path.join(path_output ,execname)
+# Create folders to store executables
+if not os.path.exists(targdir):
+    os.makedirs(targdir)
+    for i in range(num_outputdirs):
+        targdir2= os.path.join(targdir,'case_%s'%(i+1))
+        if not os.path.exists(targdir2):
+            os.makedirs(targdir2)
+
+path = path_exec
+
+oldline = [''] * 12
+newline = [''] * 12
+
+orig_namelist = path_exec + 'namel_sibdrv'
+
+# Create namelists for each thread
+for j in range(12):
+    for i in range(1, num_outputdirs+1):
+        if j==0:
+            shutil.copyfile(orig_namelist, '%s/namel_%s'%(path,i))
+        file = os.path.join(path,'namel_%s'%i)
+        
+        oldline[1]    ="   out_path = '/scratch/shared/nsmith/NRT/"
+        newline[1]    ="   out_path = %s/%s/"%(path_output, outputname) 
+
+        if spin == False:
+            oldline[2] ="   ic_file = '/projects/0/ctdas/NRT/data/SiB//restart/sib_r199601p025.nc'"
+            newline[2] ="   ic_file = '%s/restart/sib_r199601p%s.nc'" %(sibdir, str(i).zfill(3))
+            #newline[2] ="   ic_file = '/scratch/shared/nsmith/NRT/%s/sib_requibp%ss%s.nc" %(spinoutput,str(i).zfill(3),str(n_spin).zfill(2))
+        
+        oldline[3]  ="   startyear      = 1998," 
+        newline[3]  ="   startyear      = %s,"%(str(startyear))
+        oldline[4]  ="   endyear        = 2010,"
+        newline[4]  ="   endyear        = %s,"%(str(endyear))
+        oldline[5]  ="   spinup         = .false.," 
+        newline[5]  ="   spinup         = .%s.,"%(str(spin).lower())
+        oldline[6]  ="   spinup_maxiter = 5,"
+        newline[6]  ="   spinup_maxiter = %s,"%(str(n_spin))
+        oldline[7]  ="   minlon = -180,"
+        newline[7]  ="   minlon = %s,"%(str(minlon))
+        oldline[8]  ="   maxlon = 180," 
+        newline[8]  ="   maxlon = %s,"%(str(maxlon)) 
+        oldline[9]  ="   minlat = -90," 
+        newline[9]  ="   minlat = %s,"%(str(minlat))
+        oldline[10] ="   maxlat = 90," 
+        newline[10] ="   maxlat = %s,"%(str(maxlat))
+        oldline[11] ="   dtsibqp        = -1,"
+        newline[11] ="   dtsibqp        = %s,"%(str(dtsibout))
+
+        # Read - write namelists
+        f = open(file, "r") 
+        text = f.read() 
+        f.close() 
+        f = open(file, "w") 
+        f.write(text.replace(oldline[j], newline[j])) 
+        f.close() 
+
+sib4_script_path = path_exec + '/sib4_script'
+
+oldline = 'cd /scratch/shared/kooij032/NRT/ex_dir_global/case_${rank}'
+newline = 'cd ' + path_output + execname + '/case_${rank}' 
+
+# Change sib4_script
+f = open(sib4_script_path+'.template' , "r")
+text = f.read()
+f.close()
+f = open(sib4_script_path, "w")
+f.write(text.replace(oldline, newline))
+f.close()
+
+# Change sib4 permissions for mpi ---gives permission error for me (RdK)
+#os.chmod(sib4_script_path, 0o777)
+
+print("All went well, the modifications are done")
+
+if __name__ == "__main__":
+    pass
diff --git a/preprocess/archiv/io_namel_nrt.py b/preprocess/archiv/io_namel_nrt.py
new file mode 100755
index 0000000000000000000000000000000000000000..8ea8211e701d7a164821b0fd9e7aa969ecdca788
--- /dev/null
+++ b/preprocess/archiv/io_namel_nrt.py
@@ -0,0 +1,127 @@
+#!/usr/bin/env python
+# namel_io.py
+
+"""
+Author : Erik
+Original Author: Ivar
+Revision History:
+File created on 06 Oct 2010.
+Recoded to support SiB4 - Erik
+"""
+import shutil
+from numpy import *
+
+import os
+import glob
+
+num_outputdirs = 288
+path_output     = '{outputdir}'
+sibdir = '{sibdir}'
+path_exec = sibdir + 'mpi/'
+sim_name       = 'sib4_NRT'
+
+startyear = {startyear}
+endyear   = {endyear}
+
+spin   = False
+n_spin = 10
+
+minlon = -15
+maxlon = 35
+minlat = 33
+maxlat = 72
+
+dtsibout = -1
+
+if spin == True:
+    outputname = 'output_'+sim_name+'_spin_1850'
+    execname   = 'ex_dir_'+sim_name+'_spin_1850'
+else:
+    outputname = 'output_'+sim_name+'_sim'  
+    execname   = 'ex_dir_'+sim_name+'_sim'  
+    #spinoutput = 'output_'+sim_name+'_spin_1850' 
+
+targdir = os.path.join(path_output, outputname)
+# Create output folder
+if not os.path.exists(targdir):
+    os.makedirs(targdir)
+
+
+targdir = os.path.join(path_output ,execname)
+# Create folders to store executables
+if not os.path.exists(targdir):
+    os.makedirs(targdir)
+    for i in range(num_outputdirs):
+        targdir2= os.path.join(targdir,'case_%s'%(i+1))
+        if not os.path.exists(targdir2):
+            os.makedirs(targdir2)
+
+path = path_exec
+
+oldline = [''] * 12
+newline = [''] * 12
+
+orig_namelist = path_exec + 'namel_sibdrv'
+
+# Create namelists for each thread
+for j in range(12):
+    for i in range(1, num_outputdirs+1):
+        if j==0:
+            shutil.copyfile(orig_namelist, '%s/namel_%s'%(path,i))
+        file = os.path.join(path,'namel_%s'%i)
+        
+        oldline[1]    ="   out_path = '/scratch/shared/nsmith/NRT/"
+        newline[1]    ="   out_path = %s/%s/"%(path_output, outputname) 
+
+        if spin == False:
+            oldline[2] ="   ic_file = '/projects/0/ctdas/NRT/data/SiB//restart/sib_r199601p025.nc'"
+            newline[2] ="   ic_file = '%s/restart/sib_r199601p%s.nc'" %(sibdir, str(i).zfill(3))
+            #newline[2] ="   ic_file = '/scratch/shared/nsmith/NRT/%s/sib_requibp%ss%s.nc" %(spinoutput,str(i).zfill(3),str(n_spin).zfill(2))
+        
+        oldline[3]  ="   startyear      = 1998," 
+        newline[3]  ="   startyear      = %s,"%(str(startyear))
+        oldline[4]  ="   endyear        = 2010,"
+        newline[4]  ="   endyear        = %s,"%(str(endyear))
+        oldline[5]  ="   spinup         = .false.," 
+        newline[5]  ="   spinup         = .%s.,"%(str(spin).lower())
+        oldline[6]  ="   spinup_maxiter = 5,"
+        newline[6]  ="   spinup_maxiter = %s,"%(str(n_spin))
+        oldline[7]  ="   minlon = -180,"
+        newline[7]  ="   minlon = %s,"%(str(minlon))
+        oldline[8]  ="   maxlon = 180," 
+        newline[8]  ="   maxlon = %s,"%(str(maxlon)) 
+        oldline[9]  ="   minlat = -90," 
+        newline[9]  ="   minlat = %s,"%(str(minlat))
+        oldline[10] ="   maxlat = 90," 
+        newline[10] ="   maxlat = %s,"%(str(maxlat))
+        oldline[11] ="   dtsibqp        = -1,"
+        newline[11] ="   dtsibqp        = %s,"%(str(dtsibout))
+
+        # Read - write namelists
+        f = open(file, "r") 
+        text = f.read() 
+        f.close() 
+        f = open(file, "w") 
+        f.write(text.replace(oldline[j], newline[j])) 
+        f.close() 
+
+sib4_script_path = path_exec + '/sib4_script'
+
+oldline = 'cd /scratch/shared/kooij032/NRT/ex_dir_global/case_${{rank}}'
+newline = 'cd ' + path_output + execname + '/case_${{rank}}' 
+
+# Change sib4_script
+f = open(sib4_script_path+'.template' , "r")
+text = f.read()
+f.close()
+f = open(sib4_script_path, "w")
+f.write(text.replace(oldline, newline))
+f.close()
+
+# Change sib4 permissions for mpi ---gives permission error for me (RdK)
+#os.chmod(sib4_script_path, 0o777)
+
+print("All went well, the modifications are done")
+
+if __name__ == "__main__":
+    pass
diff --git a/preprocess/archiv/sib4_preprocessing_carbontracker.py b/preprocess/archiv/sib4_preprocessing_carbontracker.py
new file mode 100644
index 0000000000000000000000000000000000000000..6a24b3037fca6e7416dfea7056250395e17af60c
--- /dev/null
+++ b/preprocess/archiv/sib4_preprocessing_carbontracker.py
@@ -0,0 +1,86 @@
+import netCDF4 as nc
+import sys
+import glob
+import os
+
+sys.path.append('/Users/lindakooijmans/Documents/Python/Funcs/')
+import sib4maptools as sibtools
+
+outputdir = '/scratch/shared/nsmith/test_near_real_time/sib4_out_test'
+
+for yy in range(2010, 2020): 
+    for mm in range(1, 13):
+    
+        ########################
+        ###### Load Data #######
+        ########################
+        
+        filedir = '/scratch/shared/nsmith/NRT/output_sib4_NRT_sim/qsib_'+str(yy)+'{:02}'.format(mm)+'.g.qp2.nc'
+        
+        files = glob.glob(filedir)
+        
+        with nc.Dataset(files[0]) as d:
+            time_orig = d['time'][:]
+            lonsib_orig = d['lonsib'][:]
+            latsib_orig = d['latsib'][:]
+
+            gpp_orig       = d['gpp'][:,:]
+            nee_orig       = d['nee'][:,:]
+            reco_orig      = d['reco'][:,:]
+
+        print(filedir+"   loaded")
+        
+        ##############################
+        ###### Create new file #######
+        ##############################
+        
+        newfiledir = outputdir+'SiB4v2_BioFluxes_'+str(yy)+'{:02}'.format(mm)+'.nc'
+
+        x = nc.Dataset(newfiledir,'w',format='NETCDF4')
+
+        # -- Create dimension
+
+        x.createDimension('latitude', 360)
+        x.createDimension('longitude', 720)
+        x.createDimension('time', len(time_orig))
+
+        # -- Create variables: Dataset.createVariable(<var_id>, <type>, <dimensions>)
+        latsib = x.createVariable('latitude','f',('latitude'))
+        lonsib = x.createVariable('longitude','f',('longitude'))
+        time = x.createVariable('time','f',('time'))
+        gpp = x.createVariable('gpp','f',('time','latitude', 'longitude'))
+        reco = x.createVariable('reco','f',('time','latitude', 'longitude'))
+        nee = x.createVariable('nee','f',('time','latitude', 'longitude'))
+
+        # -- Write array to file
+        latsib[:] = np.arange(-89.75, 90.25, 0.5)
+        lonsib[:] = np.arange(-179.75, 180.25, 0.5)
+        time[:] = time_orig[:]
+        gpp[:,:,:] = sibtools.convert_2d(gpp_orig, latsib_orig, lonsib_orig)
+        reco[:,:,:] = sibtools.convert_2d(reco_orig, latsib_orig, lonsib_orig)
+        nee[:,:,:] = sibtools.convert_2d(nee_orig, latsib_orig, lonsib_orig)
+
+        # -- Set attributes of variables
+        latsib.setncattr('long_name','Latitude')
+        lonsib.setncattr('long_name','Longitude')
+        time.setncattr('unit','3-hourly time step')
+        time.setncattr('long_name','time')
+        gpp.setncattr('unit','micromol m-2 s-1')
+        gpp.setncattr('long_name','Gross Primary Productivity')
+        gpp.setncattr('comment','Positive values are a flux from the atmosphere to the biosphere')
+        nee.setncattr('unit','micromol m-2 s-1')
+        nee.setncattr('long_name','Net Ecosystem Exchange')
+        nee.setncattr('comment','Positive values are a flux from the biosphere to the atmosphere')
+        reco.setncattr('unit','micromol m-2 s-1')
+        reco.setncattr('long_name','Total Ecosystem Respiration')
+        reco.setncattr('comment','Positive values are a flux from the biosphere to the atmosphere')
+
+        # -- Set metadata
+        # x.setncattr('creation_date',datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
+        x.setncattr('release_note','File created by Linda Kooijmans (Wageningen University)')
+        x.setncattr('created','September, 2020')
+
+        # -- Close file
+        x.close()
+
+        print(newfiledir+"   created")
diff --git a/preprocess/gpcp_regrid.f90 b/preprocess/gpcp_regrid.f90
new file mode 100644
index 0000000000000000000000000000000000000000..89902c0254a3297e933d1f6b2e392b249baaeba6
--- /dev/null
+++ b/preprocess/gpcp_regrid.f90
@@ -0,0 +1,291 @@
+!Program to redo longitudes of GPCP 
+!  to go from -180 to 180, and
+!  to create monthly totals rather than month means, and
+!  to regrid GPCP to weather data resolution.
+!
+!Use the makefile in this directory
+!>make gpcp_regrid  (NC=3 for netcdf3)
+!
+!kdhaynes, 01/2018
+!
+program gpcp_regrid
+
+use netcdf
+implicit none
+
+character*180, parameter :: &  !initial GPCP file
+   infile='/scratch/shared/erikvs/precip.mon.mean.nc'
+character*180, parameter :: &  !regridded GPCP file
+   outfile='/scratch/shared/erikvs/gpcp/gpcp_0.625dx0.5d_tot.nc'
+character*180, parameter :: &  !regrid file
+   regridfile='/scratch/shared/erikvs/merra_2018_proc/merra_201908.nc'
+
+integer, parameter :: gpcpyrstart=1979
+real, parameter :: badval = -9999.
+integer, parameter :: maxng=4
+
+!!!Netcdf variables
+integer :: status
+integer :: ncid,ncid2,dimid,varid
+integer :: nlatdid, nlondid, ntimedid
+integer :: latid, lonid, timeid
+integer :: precipid
+character*20 :: dimname
+
+!!!GPCP variables
+integer :: nlong, nlatg, ntime
+real, dimension(:), allocatable :: longpcpin, longpcp, latgpcp
+real, dimension(:,:,:), allocatable :: gpcpin, gpcpall, gpcpout
+real*8, dimension(:,:), allocatable :: areagg
+
+!!!Regrid variables
+integer :: nlon, nlat
+real, dimension(:), allocatable :: lon, lat
+real*8, dimension(:,:), allocatable :: areag
+
+!!!Areal variables
+integer, dimension(:,:), allocatable :: ngmin
+integer, dimension(:,:,:), allocatable :: refiin,refjin
+real*8, dimension(:), allocatable :: arlonin, arlatin
+real*8, dimension(:), allocatable :: arlonout, arlatout
+real*8, dimension(:,:,:), allocatable :: contribin
+logical :: regridup
+
+!!!Time variables
+real, dimension(:), allocatable :: time
+
+!!!Local variables
+integer :: i,j,ii,jj
+integer :: yrref, monref
+integer :: startref, lonref
+integer :: numatts, att
+character(len=30) :: attname
+
+integer :: dayspermon(12)
+real :: radius
+real*8 :: pi
+
+!------------------
+!Set local variables
+data dayspermon/31,28,31,30,31,30,31,31,30,31,30,31/
+pi = acos(-1.0)
+radius = 6371000.
+
+!------------------
+!Get the GPCP data
+print*,''
+print('(a)'),'GPCP File Information: '
+print('(a,a)'), '   ',trim(infile)
+status = nf90_open( trim(infile), nf90_nowrite, ncid )
+
+status = nf90_inq_dimid(ncid, 'lon', dimid )
+status = nf90_inquire_dimension(ncid, dimid, dimname, nlong)
+status = nf90_inq_dimid(ncid, 'lat', dimid )
+status = nf90_inquire_dimension(ncid, dimid, dimname, nlatg)
+status = nf90_inq_dimid(ncid, 'time', dimid )
+status = nf90_inquire_dimension(ncid, dimid, dimname, ntime)
+
+allocate(longpcpin(nlong))
+allocate(longpcp(nlong), latgpcp(nlatg))
+status = nf90_inq_varid(ncid, 'lon', varid )
+status = nf90_get_var(ncid, varid, longpcpin )
+status = nf90_inq_varid(ncid, 'lat', varid )
+status = nf90_get_var(ncid, varid, latgpcp )
+
+allocate(gpcpin(nlong,nlatg,ntime))
+allocate(gpcpall(nlong,nlatg,ntime))
+status = nf90_inq_varid(ncid, 'precip', varid )
+status = nf90_get_var(ncid, varid, gpcpin )
+status = nf90_close(ncid)
+where(gpcpin .lt. 0.) gpcpin=0.
+
+!....fix GPCP longitude
+IF (maxval(longpcpin) .GT. 180.) THEN
+   startref=0
+   do i=1,nlong
+      if ((longpcpin(i) .gt. 180.) .and. &
+          (startref .eq. 0)) then
+          startref = i
+      endif
+   enddo
+
+   lonref = startref
+    do i=1,nlong
+        longpcp(i) = longpcpin(lonref)
+        if (longpcp(i) .gt. 180.) then
+            longpcp(i) = longpcp(i) - 360.
+        endif
+        gpcpall(i,:,:) = gpcpin(lonref,:,:)
+        lonref = lonref + 1
+         if (lonref .gt. nlong) lonref=1
+    enddo
+
+   print*,'  Reversed Lon (min/max): ',minval(longpcp),maxval(longpcp)
+   print*,'  Precip (min/max in mm/day): ',minval(gpcpall),maxval(gpcpall)
+ELSE
+   longpcp=longpcpin
+   gpcpall=gpcpin
+ENDIF
+IF (maxval(longpcp) .GT. 180.) THEN
+   print('(a)'),'ERROR CONVERTING LON TO -180 TO 180'
+   RETURN
+ENDIF
+
+!....get GPCP time
+allocate(time(ntime))
+monref=1
+yrref=gpcpyrstart
+do i=1,ntime
+   time(i) = yrref + (monref-0.5)/12.
+   gpcpall(:,:,i) = gpcpall(:,:,i)*dayspermon(monref)
+
+   monref=monref+1
+   if (monref .eq. 13) then
+      monref = 1
+      yrref=yrref+1
+   endif
+enddo
+
+!-----------------------
+!Get regrid information
+print*,''
+print('(a)'),'Regrid File Information: '
+print('(a,a)'), '   ',trim(regridfile)
+status = nf90_open( trim(regridfile), nf90_nowrite, ncid )
+if (status .ne. nf90_noerr) then
+   print*,'Error Opening File. Stopping.'
+   stop
+endif
+
+status = nf90_inq_dimid(ncid, 'lon', dimid )
+status = nf90_inquire_dimension(ncid, dimid, dimname, nlon)
+status = nf90_inq_dimid(ncid, 'lat', dimid )
+status = nf90_inquire_dimension(ncid, dimid, dimname, nlat)
+
+allocate(lon(nlon),lat(nlat))
+status = nf90_inq_varid(ncid, 'longitude', varid )
+status = nf90_get_var(ncid, varid, lon )
+status = nf90_inq_varid(ncid, 'latitude', varid )
+status = nf90_get_var(ncid, varid, lat )
+status = nf90_close(ncid)
+
+regridup = .true.
+IF (nlon .GT. nlong) regridup = .false.
+
+!--------------------------------
+!Allocate the areal arrays
+allocate(arlonin(nlong),arlatin(nlatg))
+allocate(arlonout(nlon),arlatout(nlat))
+allocate(areagg(nlong,nlatg))
+allocate(areag(nlon,nlat))
+
+allocate(gpcpout(nlon,nlat,ntime))
+gpcpout = 0.
+
+!-------------------------------
+!Regrid the precip data
+IF (regridup) THEN
+    allocate(ngmin(nlong,nlatg))
+    allocate(refiin(nlong,nlatg,maxng), &
+             refjin(nlong,nlatg,maxng))
+    allocate(contribin(nlong,nlatg,maxng))
+
+    call regrid_upinfo(  &
+         nlong, nlatg, &
+         nlon, nlat, maxng, &
+         longpcp, latgpcp, lon, lat,  &
+         ngmin, refiin, refjin,  &
+         arlonin, arlatin, arlonout, arlatout, &
+         contribin, areagg, areag)
+
+    call regrid_varup( &
+         gpcpyrstart,  &
+         nlong, nlatg, &
+         nlon,nlat, &
+         ntime, maxng, &
+         lon, lat, &
+         ngmin, refiin, refjin, &
+         arlonin, arlatin, arlonout, arlatout, &
+         contribin, areag, &
+         gpcpall, gpcpout)
+
+ELSE
+    allocate(ngmin(nlon,nlat))
+    allocate(refiin(nlon,nlat,maxng), &
+             refjin(nlon,nlat,maxng))
+    allocate(contribin(nlon,nlat,maxng))
+
+    call regrid_downinfo(  &
+         nlong, nlatg, &
+         nlon, nlat, maxng, &
+         longpcp, latgpcp, lon, lat, &
+         ngmin, refiin, refjin, &
+         arlonin, arlatin, arlonout, arlatout, &
+         contribin, areagg, areag)
+
+    call regrid_vardown( &
+         gpcpyrstart, &
+         nlong, nlatg, ntime, &
+         nlon, nlat, maxng, &
+         ngmin, refiin, refjin, &
+         arlonin, arlatin, arlonout, arlatout, &
+         contribin, gpcpall, gpcpout)
+
+ENDIF
+
+
+
+!!!Write out file
+print('(a)')
+print('(a)'), 'Writing file: '
+print('(2a)'),'  ', trim(outfile)
+status = nf90_create( trim(outfile), nf90_clobber, ncid)
+
+!...copy global attributes....
+status = nf90_open( trim(infile), nf90_nowrite, ncid2 )
+status = nf90_inquire(ncid2, nAttributes=numatts)
+do att=1,numatts
+   status = nf90_inq_attname(ncid2,nf90_global,att,attname)
+   status = nf90_copy_att(ncid2,nf90_global,trim(attname),ncid,nf90_global)
+enddo
+status = nf90_close(ncid2)
+
+!...dimensions...
+status = nf90_def_dim( ncid, 'lon', nlon, nlondid )
+status = nf90_def_dim( ncid, 'lat', nlat, nlatdid )
+status = nf90_def_dim( ncid, 'time', ntime, ntimedid )
+
+!...variables...
+status = nf90_def_var( ncid,'lon',nf90_float,(/nlondid/), lonid )
+status = nf90_put_att( ncid, lonid, 'units','degrees_north')
+
+status = nf90_def_var( ncid,'lat',nf90_float,(/nlatdid/), latid )
+status = nf90_put_att( ncid, latid, 'units','degrees_east')
+
+status = nf90_def_var( ncid,'time',nf90_float,(/ntimedid/), timeid )
+status = nf90_put_att( ncid, timeid, 'units','years since 0000-00-00')
+
+status = nf90_def_var( ncid,'precip',nf90_float,(/nlondid,nlatdid,ntimedid/), precipid )
+status = nf90_put_att( ncid, precipid, 'long_name', &
+         'Total Month Precipitation' )
+status = nf90_put_att( ncid, precipid, 'units', 'mm/month')
+status = nf90_put_att( ncid, precipid, 'dataset', &
+         'GPCP Version 2.3 Combined Precipitation Dataset')
+
+!...take file out of define mode, into data mode
+status = nf90_enddef( ncid )
+
+!...load the variables...
+status = nf90_put_var( ncid, lonid, lon )
+status = nf90_put_var( ncid, latid, lat )
+status = nf90_put_var( ncid, timeid, time )
+status = nf90_put_var( ncid, precipid, gpcpout)
+
+!...close the file
+status = nf90_close( ncid )
+
+print*,''
+print('(a)'),'Finished Processing.'
+print*,''
+
+end program gpcp_regrid
diff --git a/preprocess/gpcp_tdown.f90 b/preprocess/gpcp_tdown.f90
new file mode 100644
index 0000000000000000000000000000000000000000..8b9de546094317fdaa23d35a4ce1f9ac349a76d3
--- /dev/null
+++ b/preprocess/gpcp_tdown.f90
@@ -0,0 +1,378 @@
+!===================================
+! Subroutine to get areal information
+!    for regridding to a smaller grid.
+!    (Downscaling...)
+!
+! kdhaynes, 06/16
+ 
+subroutine regrid_downinfo( &
+     nlonin, nlatin,   &
+     nlonout, nlatout, maxng, &
+     lonin, latin, lonout, latout, &
+     ngmin, refiin, refjin, &
+     arlonin, arlatin, &
+     arlonout, arlatout, &
+     contribin, areagin, areagout)
+
+implicit none
+
+!...parameters
+logical, parameter :: print_area=.true.
+real, parameter :: radius=6371000
+real :: pi
+
+!...input variables
+integer, intent(in) :: nlonin, nlatin
+integer, intent(in) :: nlonout, nlatout
+integer, intent(in) :: maxng
+real, dimension(nlonin), intent(in) :: lonin
+real, dimension(nlatin), intent(in) :: latin
+real, dimension(nlonout), intent(in) :: lonout
+real, dimension(nlatout), intent(in) :: latout
+integer, dimension(nlonout,nlatout), intent(inout) :: ngmin
+integer, dimension(nlonout,nlatout,maxng), intent(inout) :: refiin, refjin
+real*8, dimension(nlonin), intent(inout) :: arlonin
+real*8, dimension(nlatin), intent(inout) :: arlatin
+real*8, dimension(nlonout), intent(inout) :: arlonout
+real*8, dimension(nlatout), intent(inout) :: arlatout
+real*8, dimension(nlonout,nlatout,maxng), intent(inout) :: contribin
+real*8, dimension(nlonin,nlatin), intent(inout) :: areagin
+real*8, dimension(nlonout,nlatout), intent(inout) :: areagout
+
+!...local variables
+real :: deltalonin, deltalatin
+real*8 :: areatotin
+real :: loninWt, loninEt
+real, dimension(nlonin) :: loninloc, loninE, loninW
+real, dimension(nlatin) :: latinN, latinS
+
+real :: deltalonout, deltalatout
+real, dimension(nlonout) :: lonoutE, lonoutW
+real, dimension(nlatout) :: latoutN, latoutS
+
+real*8 :: latsr, latnr, lonwr, loner
+real*8 :: londiff,sinlatdiff
+
+!...misc variables
+integer :: i,j,ii,jj
+integer :: irefin, jrefin
+real*8  :: temparea
+
+!----------------------------------------
+pi = acos(-1.0)
+ngmin(:,:) = 0
+refiin(:,:,:) = 0
+refjin(:,:,:) = 0
+
+!Calculate areal variables for original grid
+deltalonin=(lonin(3)-lonin(2))/2.
+deltalatin=(latin(3)-latin(2))/2.
+
+do i=1,nlonin
+   if (lonin(i) .gt. 180.) then
+       loninloc(i) = lonin(i) - 360.
+   else
+       loninloc(i) = lonin(i)
+   endif
+   loninE(i)=loninloc(i)+deltalonin
+   loninW(i)=loninloc(i)-deltalonin
+   arlonin(i)=(loninE(i)-loninW(i))/360.
+enddo
+arlonin = arlonin*2*pi*radius*radius
+
+do j=1,nlatin
+   if (j .eq. 1) then
+      latinS(j) = -90.
+      latinN(j) = (latin(j+1) + latin(j))*0.5
+   elseif (j .eq. 2) then
+      latinS(j) = (latin(j-1) + latin(j))*0.5
+      latinN(j) = latin(j) + deltalatin
+   elseif (j .eq. nlatin-1) then
+      latinS(j) = latin(j) - deltalatin
+      latinN(j) = (latin(j) + latin(j+1))*0.5
+   elseif (j .eq. nlatin) then
+      latinS(j) = (latin(j-1) + latin(j))*0.5
+      latinN(j) = 90.
+   else
+      latinS(j) = latin(j) - deltalatin
+      latinN(j) = latin(j) + deltalatin
+   endif
+
+   arlatin(j) = -sin(pi*latinS(j)/180.) + &
+                 sin(pi*latinN(j)/180.)
+enddo
+
+areatotin=0.
+do ii=1,nlonin
+   do jj=1,nlatin
+      latsr=latinS(jj)*pi/180.
+      latnr=latinN(jj)*pi/180.
+      lonwr=loninW(ii)*pi/180.
+      loner=loninE(ii)*pi/180.
+      londiff=loner-lonwr
+      sinlatdiff=sin(latnr)-sin(latsr)
+      areagin(ii,jj) = radius*radius*londiff*sinlatdiff
+      areatotin = areatotin + areagin(ii,jj)
+   enddo !jj
+enddo !ii
+
+!Calculate areal variables for new grid
+deltalonout=(lonout(3)-lonout(2))/2.
+deltalatout=(latout(3)-latout(2))/2.
+
+do i=1,nlonout
+   lonoutE(i)=lonout(i)+deltalonout
+   lonoutW(i)=lonout(i)-deltalonout
+   arlonout(i)=(lonoutE(i)-lonoutW(i))/360.
+enddo
+arlonout = arlonout*2*pi*radius*radius
+
+do j=1,nlatout
+   latoutS(j) = latout(j) - deltalatout
+   latoutN(j) = latout(j) + deltalatout
+
+   IF (latoutS(j) .lt. -90.) THEN
+      latoutS(j) = -90.
+   ENDIF
+
+   IF (latoutN(j) .gt. 90.) THEN
+      latoutN(j) = 90.
+   ENDIF
+
+   arlatout(j) = -sin(pi*latoutS(j)/180.) + &
+                  sin(pi*latoutN(j)/180.)
+enddo
+
+do ii=1,nlonout
+   do jj=1,nlatout
+      latsr=latoutS(jj)*pi/180.
+      latnr=latoutN(jj)*pi/180.
+      lonwr=lonoutW(ii)*pi/180.
+      loner=lonoutE(ii)*pi/180.
+      londiff=loner-lonwr
+      sinlatdiff=sin(latnr)-sin(latsr)
+
+      areagout(ii,jj) = radius*radius*londiff*sinlatdiff
+   enddo !jj
+enddo !ii
+
+!Area calculations
+ngmin(:,:)=0
+do ii=1,nlonout
+   do jj=1,nlatout
+
+      do i=1,nlonin
+         loninWt = loninW(i)
+         loninEt = loninE(i)
+         if ((loninW(i) .le. 180.) .and. (loninE(i) .ge. 180.)) then
+              if (lonout(ii) .lt. 0.) then
+                  loninWt = loninW(i) - 360.
+                  loninEt = loninE(i) - 360.
+              endif
+         endif
+         do j=1,nlatin
+            IF ((lonoutE(ii) .GT. loninWt) .AND. &
+                 (lonoutW(ii) .LT. loninEt) .AND. &
+                 (latoutN(jj) .GT. latinS(j))  .AND. &
+                 (latoutS(jj) .LT. latinN(j))) THEN
+                  latsr=MAX(latoutS(jj)*pi/180.,latinS(j)*pi/180.)
+                  latnr=MIN(latoutN(jj)*pi/180.,latinN(j)*pi/180.)
+                  lonwr=MAX(lonoutW(ii)*pi/180.,loninWt*pi/180.)
+                  loner=MIN(lonoutE(ii)*pi/180.,loninEt*pi/180.)
+                  londiff=loner-lonwr
+                  sinlatdiff=sin(latnr)-sin(latsr)
+                  temparea = radius*radius*londiff*sinlatdiff
+                  IF (temparea .LT. 0.) THEN
+                     print*,'Negative Area: ',temparea
+                     print*,' (loninE,lonoutE,loninW,lonoutW): ', &
+                         loninEt,lonoutE(ii),loninWt,lonoutW(ii),londiff
+                     print*,' (latinS,latoutS,latinN,latoutN): ', &
+                         latinS(j),latoutS(jj),latinN(j),latoutN(jj),sinlatdiff
+                  ENDIF
+
+                  ngmin(ii,jj) = ngmin(ii,jj) + 1
+                  !print*,'Lon In: ',loninWt,loninEt
+                  !print*,'Lon Out: ',lonoutW(ii),lonoutE(ii)
+                  !print*,'Lat In: ',latinS(j),latinN(j)
+                  !print*,'Lat Out: ',latoutS(jj),latoutN(jj)
+                  !print*,'Grid Contributions: ',ngmin(ii,jj)
+
+                  IF (ngmin(ii,jj) .GT. maxng) THEN
+                      print('(a,3i6)'),'Too many grid cell contributors: ', &
+                              ngmin(ii,jj),ii,jj
+                      print*,'Longitudes: ',lonout(ii),lonoutW(ii),lonoutE(ii)
+                      print*,'Latitudes: ',latout(jj),latoutS(jj),latoutN(jj)
+                      stop
+                  ENDIF
+                  irefin = i
+                  jrefin = j
+
+                  refiin(ii,jj,ngmin(ii,jj)) = irefin
+                  refjin(ii,jj,ngmin(ii,jj)) = jrefin
+                  contribin(ii,jj,ngmin(ii,jj)) = temparea/areagout(ii,jj)
+             ENDIF
+            ENDDO !jj
+        ENDDO !ii
+
+   ENDDO !j
+ENDDO !i      
+
+!ratio=areatotin/sum(areagout)
+!areagout=areagout*ratio
+!ratio=areatotin/sum(contribin)
+!contribin=contribin*ratio
+
+!Check areas
+if (print_area) then
+   print('(a)'), '    Area should be: 0.51E+15 m2'
+   print('(a)'), '    Area used for calculation:'
+   print('(2(a,E15.8))'), '       Orig   = ', &
+               sum(areagin),'  ',sum(arlonin)*sum(arlatin)
+   print('(2(a,E15.8))'), '       New    = ', &
+               sum(areagout),'  ',sum(arlonout)*sum(arlatout)
+endif
+
+!Check to make sure all new grid points 
+!  have a contributor
+do ii=1,nlonout
+   do jj=1,nlatout
+      if ((sum(contribin(ii,jj,:)) .le. 0.99) .or. &
+          (sum(contribin(ii,jj,:)) .gt. 1.01)) then
+          print*,'Bad Original Contribution: ',ii,jj,sum(contribin(ii,jj,:))
+          STOP
+      endif
+   enddo
+enddo
+
+end subroutine regrid_downinfo
+
+
+
+!===================================
+! Subroutine to output regrid a variable.
+!
+! kdhaynes, 06/16
+ 
+subroutine regrid_vardown( gpcpyrstart, &
+     nlonin, nlatin, ntime, &
+     nlonout, nlatout, maxng, &
+     ngmin, refiin, refjin, &
+     arlonin, arlatin, arlonout, arlatout, &
+     contribin, varin, varout)
+
+implicit none
+
+!parameters
+real, parameter :: earth_sfc_area = 5.1E14
+logical, parameter :: print_sums=.true.
+character(len=3), dimension(12), parameter :: &
+   monname = ['Jan','Feb','Mar','Apr','May','Jun', &
+    'Jul','Aug','Sep','Oct','Nov','Dec']
+
+!input variables
+integer, intent(in) :: gpcpyrstart
+integer, intent(in) :: nlonin, nlatin, ntime
+integer, intent(in) :: nlonout, nlatout, maxng
+
+integer, dimension(nlonout,nlatout), intent(in) :: ngmin
+integer, dimension(nlonout,nlatout,maxng), intent(in) :: refiin, refjin
+
+real*8, dimension(nlonin), intent(in) :: arlonin
+real*8, dimension(nlatin), intent(in) :: arlatin
+real*8, dimension(nlonout), intent(in) :: arlonout
+real*8, dimension(nlatout), intent(in) :: arlatout
+real*8, dimension(nlonout,nlatout,maxng), intent(in) :: contribin
+
+real, dimension(nlonin,nlatin,ntime), intent(in) :: varin
+real, dimension(nlonout,nlatout,ntime), intent(inout) :: varout
+
+!data variables
+real, dimension(nlonin,nlatin,ntime) :: varinloc
+
+!processing area variables
+real*8 :: ratio
+real*8 :: sumvarin, sumvarout1, sumvarout2
+
+!local variables
+integer :: i,j,k,l,t
+integer :: irefin, jrefin
+integer :: monref, yrref
+
+!-------------------------
+!regrid
+monref = 1
+yrref = gpcpyrstart
+varout = 0.0
+
+do t=1,ntime
+   do i=1,nlonout
+      do j=1,nlatout
+         do l=1,ngmin(i,j)
+            irefin=refiin(i,j,l)
+            jrefin=refjin(i,j,l)
+
+             varout(i,j,t) = varout(i,j,t) + &
+                varin(irefin,jrefin,t) * &
+                real(contribin(i,j,l))
+          enddo !l=1,ngmin
+      enddo !j=1,nlatin
+   enddo !i=1,nlonin
+
+   !calculate global totals
+   sumvarin=0.0
+   do i=1,nlonin
+      do j=1,nlatin
+         sumvarin = sumvarin + &
+            varin(i,j,t)*arlonin(i)*arlatin(j)
+      enddo  !j=1,nlatin
+   enddo !i=1,nlonin
+
+   sumvarout1=0.0
+   do i=1,nlonout
+      do j=1,nlatout
+         sumvarout1 = sumvarout1 + &
+              varout(i,j,t)*arlonout(i)*arlatout(j)
+      enddo !j=1,nlatout
+   enddo !i=1,nlonout
+
+   !rescale
+   if (sumvarout1 .ne. 0.) then
+      ratio=sumvarin/sumvarout1
+   else
+      ratio=1.
+   endif
+   varout(:,:,t)=varout(:,:,t)*real(ratio)
+
+   !recheck
+   sumvarout2=0.0
+   do i=1,nlonout
+      do j=1,nlatout
+         sumvarout2 = sumvarout2 + &
+                 (varout(i,j,t))*arlonout(i)*arlatout(j)
+      enddo  !j=1,nlatout
+   enddo !i=1,nlonout
+
+   if (print_sums) then
+      print*,''
+      print('(a,a,i5)'), &
+         'Precipitation for ',monname(monref),yrref
+      
+      print*,'  Orig Max/Min Precip (mm/mon)  : ', &
+            maxval(varin(:,:,t)), &
+            minval(varin(:,:,t))
+      print*,'  Regrid Max/Min Precip (mm/mon): ', &
+            maxval(varout(:,:,t)), &
+            minval(varout(:,:,t))
+      print*,'  Totals (global mean in mm/mon)'
+      print('(a,f15.8)'),'     In : ',sumvarin/earth_sfc_area
+      print('(a,f15.8)'),'     Out: ',sumvarout2/earth_sfc_area
+   endif
+
+   monref = monref + 1
+   if (monref .eq. 13) then
+      monref = 1
+      yrref = yrref + 1
+   endif
+enddo !t=1,ntime
+
+end subroutine regrid_vardown
diff --git a/preprocess/gpcp_tup.f90 b/preprocess/gpcp_tup.f90
new file mode 100644
index 0000000000000000000000000000000000000000..fd83c98c73e7e2c73e65b539725ad42ec7e2e39f
--- /dev/null
+++ b/preprocess/gpcp_tup.f90
@@ -0,0 +1,352 @@
+!===================================
+! Subroutine to get areal information
+!    for regridding to a coarser grid.
+!    (Upscaling...)
+!
+! kdhaynes, 10/17
+ 
+subroutine regrid_upinfo( &
+     nlonin, nlatin, &
+     nlonout, nlatout, maxng, &
+     lonin, latin, lonout, latout, &
+     ngmin, refiin, refjin, &
+     arlonin, arlatin, arlonout, arlatout, &
+     contribin, areagin, areagout)
+
+implicit none
+
+!...parameters
+logical, parameter :: print_area=.false.
+real, parameter :: radius=6371000
+real :: pi
+
+!...input variables
+integer, intent(in) :: nlonin, nlatin
+integer, intent(in) :: nlonout, nlatout
+integer, intent(in) :: maxng
+real, dimension(nlonin), intent(in) :: lonin
+real, dimension(nlatin), intent(in) :: latin
+real, dimension(nlonout), intent(in) :: lonout
+real, dimension(nlatout), intent(in) :: latout
+
+integer, dimension(nlonin,nlatin), intent(inout) :: ngmin
+integer, dimension(nlonin,nlatin,maxng), intent(inout) :: refiin, refjin
+real*8, dimension(nlonin), intent(inout) :: arlonin
+real*8, dimension(nlatin), intent(inout) :: arlatin
+real*8, dimension(nlonout), intent(inout) :: arlonout
+real*8, dimension(nlatout), intent(inout) :: arlatout
+real*8, dimension(nlonin,nlatin,maxng), intent(inout) :: contribin
+real*8, dimension(nlonin,nlatin), intent(inout) :: areagin
+real*8, dimension(nlonout,nlatout), intent(inout) :: areagout
+
+!...local variables
+real :: deltalonin, deltalatin
+real*8 :: areatotin
+real, dimension(nlonin) :: loninE, loninW
+real, dimension(nlatin) :: latinN, latinS
+
+real :: deltalonout, deltalatout
+real, dimension(nlonout+1) :: lonoutEe, lonoutWe
+real, dimension(nlatout) :: latoutN, latoutS
+
+real*8 :: latsr, latnr, lonwr, loner
+real*8 :: londiff,sinlatdiff
+
+!...misc variables
+integer :: i,j,ii,jj
+integer :: irefout, jrefout
+real*8  :: ratio, temparea
+
+!----------------------------------------
+pi = acos(-1.0)
+ngmin(:,:) = 0
+refiin(:,:,:) = 0
+refjin(:,:,:) = 0
+
+!Calculate areal variables for original grid
+deltalonin=(lonin(3)-lonin(2))/2.
+deltalatin=(latin(3)-latin(2))/2.
+
+do i=1,nlonin
+   loninE(i)=lonin(i)+deltalonin
+   loninW(i)=lonin(i)-deltalonin
+   arlonin(i)=(loninE(i)-loninW(i))/360.
+enddo
+arlonin = arlonin*2*pi*radius*radius/1.e15
+
+do j=1,nlatin
+   latinS(j) = latin(j) - deltalatin
+   latinN(j) = latin(j) + deltalatin
+
+   IF (latinS(j) .lt. -90.) THEN
+      latinS(j) = -90.
+   ENDIF
+
+   IF (latinN(j) .gt. 90.) THEN
+      latinN(j) = 90.
+   ENDIF
+
+   arlatin(j) = -sin(pi*latinS(j)/180.) + &
+                 sin(pi*latinN(j)/180.)
+enddo
+
+areatotin=0.
+do ii=1,nlonin
+   do jj=1,nlatin
+      latsr=latinS(jj)*pi/180.
+      latnr=latinN(jj)*pi/180.
+      lonwr=loninW(ii)*pi/180.
+      loner=loninE(ii)*pi/180.
+      londiff=loner-lonwr
+      sinlatdiff=sin(latnr)-sin(latsr)
+      areagin(ii,jj) = radius*radius*londiff*sinlatdiff
+      areatotin = areatotin + areagin(ii,jj)
+   enddo !jj
+enddo !ii
+
+!Calculate areal variables for new grid
+deltalonout=(lonout(3)-lonout(2))/2.
+deltalatout=(latout(3)-latout(2))/2.
+
+do i=1,nlonout
+   lonoutEe(i)=lonout(i)+deltalonout
+   lonoutWe(i)=lonout(i)-deltalonout
+   arlonout(i)=(lonoutEe(i)-lonoutWe(i))/360.
+enddo
+lonoutEe(nlonout+1)=lonout(nlonout)+3*deltalonout
+lonoutWe(nlonout+1)=lonout(nlonout)+2*deltalonout
+arlonout = arlonout*2*pi*radius*radius/1.e15
+
+do j=1,nlatout
+   latoutS(j) = latout(j) - deltalatout
+   latoutN(j) = latout(j) + deltalatout
+
+   IF (latoutS(j) .lt. -90.) THEN
+      latoutS(j) = -90.
+   ENDIF
+
+   IF (latoutN(j) .gt. 90.) THEN
+      latoutN(j) = 90.
+   ENDIF
+
+   arlatout(j) = -sin(pi*latoutS(j)/180.) + &
+                  sin(pi*latoutN(j)/180.)
+enddo
+
+do ii=1,nlonout+1
+   do jj=1,nlatout
+      latsr=latoutS(jj)*pi/180.
+      latnr=latoutN(jj)*pi/180.
+      lonwr=lonoutWe(ii)*pi/180.
+      loner=lonoutEe(ii)*pi/180.
+      londiff=loner-lonwr
+      sinlatdiff=sin(latnr)-sin(latsr)
+
+      IF (ii .LT. nlonout+1) THEN
+         areagout(ii,jj) = radius*radius*londiff*sinlatdiff
+      ENDIF
+   enddo !jj
+enddo !ii
+
+!Area calculations
+ngmin(:,:)=0
+do i=1,nlonin
+   do j=1,nlatin
+       
+      do ii=1,nlonout+1
+         do jj=1,nlatout
+             IF ((loninE(i) .GT. lonoutWe(ii)) .AND. &
+                 (loninW(i) .LT. lonoutEe(ii)) .AND. &
+                 (latinN(j) .GT. latoutS(jj))  .AND. &
+                 (latinS(j) .LT. latoutN(jj))) THEN
+                  latsr=MAX(latoutS(jj)*pi/180.,latinS(j)*pi/180.)
+                  latnr=MIN(latoutN(jj)*pi/180.,latinN(j)*pi/180.)
+                  lonwr=MAX(lonoutWe(ii)*pi/180.,loninW(i)*pi/180.)
+                  loner=MIN(lonoutEe(ii)*pi/180.,loninE(i)*pi/180.)
+                  londiff=loner-lonwr
+                  sinlatdiff=sin(latnr)-sin(latsr)
+                  temparea = radius*radius*londiff*sinlatdiff
+                  IF (temparea .LT. 0.) THEN
+                     print*,'Negative Area: ',temparea
+                     print*,' (loninE,lonoutE,loninW,lonoutW): ', &
+                         loninE(i),lonoutEe(ii),loninW(i),lonoutWe(ii),londiff
+                     print*,' (latinS,latoutS,latinN,latoutN): ', &
+                         latinS(j),latoutS(jj),latinN(j),latoutN(jj),sinlatdiff
+                  ENDIF
+
+                  ngmin(i,j) = ngmin(i,j) + 1
+                  IF (ngmin(i,j) .GT. maxng) THEN
+                      print*,'Too many original grid cell contributors: ', &
+                              ngmin(i,j),i,j,lonin(i),latin(i)
+                      stop
+                  ENDIF
+                  IF (ii .EQ. nlonout+1) THEN
+                      irefout = 1
+                  ELSE
+                      irefout = ii
+                  ENDIF
+                  jrefout = jj
+
+                  refiin(i,j,ngmin(i,j)) = irefout
+                  refjin(i,j,ngmin(i,j)) = jrefout
+                  contribin(i,j,ngmin(i,j)) = temparea
+
+             ENDIF
+            ENDDO !jj
+        ENDDO !ii
+
+   ENDDO !j
+ENDDO !i      
+
+!Rescale areas
+ratio=areatotin/sum(areagout)
+areagout=areagout*ratio
+ratio=areatotin/sum(contribin)
+contribin=contribin*ratio
+
+!Check areas
+if (print_area) then
+   print('(a)'), '    Area should be: 0.50990436E+15 m2'
+   print('(a)'), '    Area used for calculation:'
+   print('(a,E15.8)'), '       Orig   = ',sum(areagin)
+   print('(a,E15.8)'), '       New    = ',sum(areagout)
+endif
+
+
+end subroutine regrid_upinfo
+
+
+!===================================
+! Subroutine to output regridded data.
+!
+! kdhaynes, 01/2018
+ 
+subroutine regrid_varup( gpcpyrstart, &
+     nlonin, nlatin, &
+     nlonout, nlatout, &
+     ntime, maxng, &
+     lonout, latout, &
+     ngmin, refiin, refjin, &
+     arlonin, arlatin, arlonout, arlatout, &
+     contribin, areagout, &
+     datain, dataout)
+
+use netcdf
+implicit none
+
+!input variables
+integer, intent(in) :: gpcpyrstart
+integer, intent(in) :: nlonin, nlatin
+integer, intent(in) :: nlonout, nlatout
+integer, intent(in) :: maxng, ntime
+real, dimension(nlonout), intent(in) :: lonout
+real, dimension(nlatout), intent(in) :: latout
+
+integer, dimension(nlonin,nlatin), intent(in) :: ngmin
+integer, dimension(nlonin,nlatin,maxng), intent(in) :: refiin, refjin
+real*8, dimension(nlonin), intent(in) :: arlonin
+real*8, dimension(nlatin), intent(in) :: arlatin
+real*8, dimension(nlonout), intent(in) :: arlonout
+real*8, dimension(nlatout), intent(in) :: arlatout
+real*8, dimension(nlonin,nlatin,maxng), intent(in) :: contribin
+real*8, dimension(nlonout,nlatout), intent(in) :: areagout
+
+real, dimension(nlonin,nlatin,ntime), intent(in) :: datain
+real, dimension(nlonout,nlatout,ntime), intent(inout) :: dataout
+
+!data variables
+real*8 :: ratio
+real*8 :: sumvarin, sumvarout1, sumvarout2
+
+!local variables
+integer :: i,j,l,t
+integer :: irefout, jrefout
+integer :: monref, yrref
+
+!parameters
+real, parameter :: earth_sfc_area = 5.1E14
+logical, parameter :: print_sums=.true.
+character(len=3), dimension(12), parameter :: &
+   monname = ['Jan','Feb','Mar','Apr','May','Jun', &
+    'Jul','Aug','Sep','Oct','Nov','Dec']
+
+!-------------------------------------
+!Process the data
+monref = 1
+yrref = gpcpyrstart
+
+do t=1,ntime
+   do j=1,nlatin
+      do i=1,nlonin
+         do l=1,ngmin(i,j)
+            irefout=refiin(i,j,l)
+            jrefout=refjin(i,j,l)
+
+            dataout(irefout,jrefout,t) = &
+                 dataout(irefout,jrefout,t) + &
+                 datain(i,j,t) * &
+                 real(contribin(i,j,l)/areagout(irefout,jrefout))
+          enddo !l=1,ngmin
+       enddo !i=1,nlonin
+    enddo !j=1,nlatin
+
+    !calculate global totals
+    sumvarin=0.0
+    do j=1,nlatin
+       do i=1,nlonin
+          sumvarin = sumvarin + &
+                 datain(i,j,t)*arlonin(i)*arlatin(j)
+       enddo  !j=1,nlatin
+    enddo !i=1,nlonin
+
+    sumvarout1=0.0
+    do j=1,nlatout
+       do i=1,nlonout
+          sumvarout1 = sumvarout1 + &
+            dataout(i,j,t)*arlonout(i)*arlatout(j)
+       enddo !i=1,nlonout
+    enddo !j=1,nlatout
+
+    !rescale
+    if (sumvarout1 .ne. 0.) then
+        ratio=sumvarin/sumvarout1
+    else
+        ratio=1.
+    endif
+    dataout(:,:,t) = dataout(:,:,t)*real(ratio)
+
+    !recheck
+    sumvarout2=0.0
+    do j=1,nlatout
+       do i=1,nlonout
+          sumvarout2 = sumvarout2 + &
+             (dataout(i,j,t))*arlonout(i)*arlatout(j)
+      enddo  !i=1,nlonout
+   enddo !j=1,nlatout
+
+   if (print_sums) then
+      print*,''
+      print('(a,a,i5)'), &
+         'Precipitation for ',monname(monref),yrref
+
+      print*,'     Orig Max/Min Precip (mm/mon)  : ', &
+             maxval(datain(:,:,t)), &
+             minval(datain(:,:,t))
+      print*,'     Regrid Max/Min Precip (mm/mon): ', &
+             maxval(dataout(:,:,t)), &
+                                   minval(dataout(:,:,t))
+      print*,'     Totals (global mean in mm/mon)'
+      print('(a,f15.8)'),'          In : ',sumvarin/earth_sfc_area
+      print('(a,f15.8)'),'          Out: ',sumvarout2/earth_sfc_area
+   endif
+
+   monref = monref + 1
+   if (monref .eq. 13) then
+      monref = 1
+      yrref = yrref + 1
+   endif
+enddo !t=1,ntime
+
+
+end subroutine regrid_varup
+
diff --git a/preprocess/merra_pullsib.f90 b/preprocess/merra_pullsib.f90
new file mode 100644
index 0000000000000000000000000000000000000000..8bdb01b0c96d69c37c68d6fbc7f18bda52e4eeaa
--- /dev/null
+++ b/preprocess/merra_pullsib.f90
@@ -0,0 +1,308 @@
+!Program to read in gridded MERRA monthly files (lonxlat),
+!and write out monthly SiB driver files (nsib).
+!
+!To compile, use:
+!>pgf90 merra_pullsib.f90 -L/usr/local/netcdf3-pgi/lib -lnetcdf -I/usr/local/netcdf3-pgi/include -o merra_pullsib
+!
+!-or- (if defined)
+!>f90nc merra_pullsib.f90
+!>f90nco merra_pullsib.f90 merra_pullsib
+!
+!>-or-
+!>make merra_pullsib
+!
+!kdhaynes, 01/2018
+!
+program  merra_pullsib
+  
+use netcdf
+
+implicit none
+
+!!!!! user defined variables
+integer, parameter :: startYr=2019, stopYr=2019
+integer, parameter :: startmon=8, stopmon=12
+
+character(len=100), parameter :: inputdir= &
+     '/scratch/shared/erikvs/merra_2018_proc/'
+character(len=6), parameter :: inprefix='merra_'
+
+character(len=100), parameter :: outputdir= &
+     '/scratch/shared/erikvs/merra_2018_proc/'
+character(len=24), parameter :: outprefix='merra2_0.5deg_'
+
+character(len=100), parameter :: sibfile= &
+     '/projects/0/ctdas/sib4_input/vs/sib_vs_0.5deg.nc'
+
+!!!!! MERRA-specific parameters
+integer, parameter :: nvar = 10
+character(len=12), parameter, dimension(nvar) :: &
+   varname = ['tm          ','sh          ','ps          ', &
+              'spdm        ','swd         ','lwd         ', &
+              'lspr        ','cupr        ','lspr_scaled ', &
+              'cupr_scaled ']
+character(len=3), parameter, dimension(12) :: &
+   monname = ['Jan','Feb','Mar','Apr','May','Jun', &
+              'Jul','Aug','Sep','Oct','Nov','Dec']
+
+!input variables
+integer :: nlon, nlat, ntime
+real, dimension(:), allocatable :: longitude, latitude
+real*8, dimension(:), allocatable :: time
+integer, dimension(:), allocatable :: year, month, doy, day
+real, dimension(:), allocatable :: hour
+real, dimension(:,:,:), allocatable :: values_temp
+real, dimension(:,:,:,:), allocatable :: values
+
+!output variables
+integer :: nsib
+real, dimension(:), allocatable :: lonsib, latsib
+real, dimension(:,:), allocatable :: valuessib_temp
+real, dimension(:,:,:), allocatable :: valuessib
+
+!comparison variables
+real :: minlon, minlat
+real, dimension(:), allocatable :: londiff, latdiff
+integer, dimension(:), allocatable :: lonref, latref
+
+!netcdf variables
+integer ncid, dimid, varid, varidin(nvar)
+integer ncidsib, varidsib(nvar)
+integer status
+integer timedid, landid
+integer timeid, latid, lonid
+integer yrid, monid, doyid, dayid, hrid
+integer valuesid(nvar)
+character(len=30) :: monunit, dayunit
+
+!misc variables
+integer j,k,v
+integer mon, yr
+integer mystartmon, mystopmon
+character(len=120) :: filename
+character(len=20) :: varname_temp
+
+!---------------------------------------------------
+!Read in the SiB lat/lon information for land points
+call check ( nf90_open( trim(sibfile), nf90_nowrite, ncid ) )
+print*,''
+print('(a)'),'Getting SiB Information: '
+print('(a,a)'),'  ',trim(sibfile)
+print*,''
+
+call check ( nf90_inq_dimid( ncid, 'nsib', dimid ) )
+call check ( nf90_inquire_dimension( ncid, dimid, len=nsib ) )
+
+allocate(lonsib(nsib), latsib(nsib))
+call check ( nf90_inq_varid( ncid, 'lonsib', varid ) )
+call check ( nf90_get_var( ncid, varid, lonsib ) )
+
+call check ( nf90_inq_varid( ncid, 'latsib', varid ) )
+call check ( nf90_get_var( ncid, varid, latsib ) )
+
+call check ( nf90_close(ncid) )
+
+!Process the files:
+DO yr=startyr, stopyr
+   mystartmon=1
+   mystopmon=12
+   if (yr .eq. startyr) mystartmon=startmon
+   if (yr .eq. stopyr) mystopmon=stopmon
+
+   DO mon=mystartmon, mystopmon
+
+      print('(a,a,a,i4)'), 'Processing ',monname(mon),' ',yr
+      
+      !Read in MERRA lat/lon
+      write(filename,'(a,a,i4.4,i2.2,a3)') &
+           trim(inputdir), trim(inprefix), yr, mon, '.nc'
+      print('(a)'),' Opening MERRA file: '
+      print('(a,a)'),'  ',trim(filename)
+
+      call check ( nf90_open( trim(filename), nf90_nowrite, ncid ) )
+
+      IF ((yr .EQ. startyr) .AND. (mon .EQ. startmon)) THEN
+          call check ( nf90_inq_dimid( ncid, 'lon', dimid ) )
+          call check ( nf90_inquire_dimension( ncid, dimid, len=nlon))
+          call check ( nf90_inq_dimid( ncid, 'lat', dimid ) )
+          call check ( nf90_inquire_dimension( ncid, dimid, len=nlat))
+
+          allocate(longitude(nlon),latitude(nlat))
+          call check ( nf90_inq_varid( ncid, 'longitude', varid ) )
+          call check ( nf90_get_var( ncid, varid, longitude ) )
+          call check ( nf90_inq_varid( ncid, 'latitude', varid ) )
+          call check ( nf90_get_var( ncid, varid, latitude ) )
+      ENDIF
+
+      call check ( nf90_inq_dimid( ncid, 'time', dimid ) )
+      call check ( nf90_inquire_dimension( ncid, dimid, len=ntime ) )
+      allocate(time(ntime))
+      allocate(year(ntime), month(ntime), doy(ntime), &
+               day(ntime), hour(ntime))
+      call check ( nf90_inq_varid( ncid, 'time', varid ) )
+      call check ( nf90_get_var( ncid, varid, time ) )
+      call check ( nf90_inq_varid( ncid, 'year', varid ) )
+      call check ( nf90_get_var( ncid, varid, year ) )
+      call check ( nf90_inq_varid( ncid, 'month', varid ) )
+      call check ( nf90_get_var( ncid, varid, month ) )
+      call check ( nf90_inq_varid( ncid, 'doy', varid ) )
+      call check ( nf90_get_var( ncid, varid, doy))
+      call check ( nf90_inq_varid( ncid, 'day', varid ) )
+      call check ( nf90_get_var( ncid, varid, day ) )
+      call check ( nf90_inq_varid( ncid, 'hour', varid ) )
+      call check ( nf90_get_var( ncid, varid, hour ) )
+
+      allocate(values_temp(nlon,nlat,ntime))
+      allocate(values(nvar,nlon,nlat,ntime))
+      DO v=1,nvar
+         varname_temp = varname(v)
+         call check ( nf90_inq_varid( ncid, varname_temp, varidin(v) ) )
+         call check ( nf90_get_var( ncid, varidin(v), values_temp) )
+         values(v,:,:,:) = values_temp(:,:,:)
+      ENDDO
+
+      !Calculate SiB4 points and references
+      IF ((yr .EQ. startyr) .AND. (mon .EQ. startmon)) THEN
+          allocate(lonref(nsib),latref(nsib))
+          allocate(londiff(nlon),latdiff(nlat))
+         
+          minlon=0.
+          minlat=0.
+          do j=1,nsib
+             londiff = abs(longitude-lonsib(j))
+             latdiff = abs(latitude-latsib(j))
+             minlon=minval(londiff)
+             minlat=minval(latdiff)
+
+             do k=1,nlon
+                if (londiff(k) .eq. minlon) lonref(j)=k
+             enddo
+             do k=1,nlat
+                if (latdiff(k) .eq. minlat) latref(j)=k
+             enddo
+          enddo !nsib
+      ENDIF
+
+      !Save the data on SiB gridpoints
+      allocate(valuessib_temp(nsib,ntime))
+      allocate(valuessib(nvar,nsib,ntime))
+      DO j=1,nsib
+         valuessib(:,j,:) = values(:,lonref(j),latref(j),:)
+      ENDDO !nsib
+
+      !Write out data to netcdf file   
+      write(filename,'(a,a,I4.4,I2.2,a3)') &
+          trim(outputdir), trim(outprefix), yr, mon, '.nc'
+      print('(a)'),' Writing output file: '
+      print('(a,a)'),'  ',trim(filename)
+
+      call check ( nf90_create(trim(filename), nf90_64bit_offset, ncidsib) )
+      call check ( nf90_def_dim(ncidsib, 'nsib', nsib, landid ) )
+      call check ( nf90_def_dim(ncidsib, 'time', ntime, timedid) )
+
+      call check ( nf90_def_var(ncidsib, 'lonsib', nf90_float, &
+                   (/landid/), lonid) )
+      call check ( nf90_put_att(ncidsib,lonid,'long_name','Vector Longitude'))
+      call check ( nf90_put_att(ncidsib,lonid,'units','degrees_east'))
+
+      call check ( nf90_def_var(ncidsib, 'latsib', nf90_float, &
+                   (/landid/), latid) )
+      call check ( nf90_put_att(ncidsib,latid,'long_name','Vector Latitude'))
+      call check ( nf90_put_att(ncidsib,latid,'units','degrees_north'))
+
+      call check ( nf90_def_var(ncidsib, 'time', nf90_double, &
+                   (/timedid/), timeid) )
+      call check ( nf90_put_att(ncidsib,timeid,'long_name','Time'))
+      call check ( nf90_put_att(ncidsib,timeid,'units','years since 0000-00-00'))
+
+      call check ( nf90_def_var(ncidsib, 'year', nf90_int, &
+                   (/timedid/), yrid) )
+      call check ( nf90_put_att(ncidsib,yrid,'long_name','Year'))
+      call check ( nf90_put_att(ncidsib,yrid,'units','year since 0000-00-00'))
+
+      call check ( nf90_def_var(ncidsib, 'month', nf90_int, &
+                   (/timedid/), monid) )
+      write(monunit,'(a,i4,a)') &
+           'month since ', yr, '-00-00'
+      call check ( nf90_put_att(ncidsib,monid,'long_name','Month'))
+      call check ( nf90_put_att(ncidsib,monid,'units',monunit) )
+
+      call check ( nf90_def_var(ncidsib, 'doy', nf90_int, &
+                   (/timedid/), doyid) )
+      write(dayunit,'(a,i4.4,a)') &
+           'days since ', yr, '-00-00'
+      call check ( nf90_put_att(ncidsib,doyid,'long_name','Day Of Year'))
+      call check ( nf90_put_att(ncidsib,doyid,'units',dayunit))
+
+      call check ( nf90_def_var(ncidsib, 'day', nf90_int, &
+                   (/timedid/), dayid) )
+      write(dayunit,'(a,i4.4,a,i2.2,a)') &
+           'days since ', yr, '-', mon, '-00'
+      call check ( nf90_put_att(ncidsib,dayid,'long_name','Day Of Month'))
+      call check ( nf90_put_att(ncidsib,dayid,'units',dayunit))
+
+      call check ( nf90_def_var(ncidsib, 'hour', nf90_float, &
+                   (/timedid/), hrid) )
+      call check ( nf90_put_att(ncidsib,hrid,'long_name','Hour'))
+      call check ( nf90_put_att(ncidsib,hrid,'units','hour of day (GMT)'))
+
+      do j=1, nvar
+         varname_temp = varname(j)
+         call check ( nf90_def_var(ncidsib, trim(varname_temp), &
+                        nf90_float, (/landid,timedid/), varidsib(j)) )
+         call check ( nf90_copy_att(ncid, varidin(j), &
+                        'long_name', ncidsib, varidsib(j)))
+         call check ( nf90_copy_att(ncid, varidin(j), &
+                        'units', ncidsib, varidsib(j)))
+         status = nf90_copy_att(ncid, varidin(j), &
+                        'title', ncidsib, varidsib(j))
+      enddo
+
+      status = nf90_enddef(ncidsib)
+
+      call check ( nf90_put_var(ncidsib, timeid, time) )
+      call check ( nf90_put_var(ncidsib, lonid, lonsib) )
+      call check ( nf90_put_var(ncidsib, latid, latsib) )
+      call check ( nf90_put_var(ncidsib, yrid, year) )
+      call check ( nf90_put_var(ncidsib, monid, month) )
+      call check ( nf90_put_var(ncidsib, doyid, doy) )
+      call check ( nf90_put_var(ncidsib, dayid, day) )
+      call check ( nf90_put_var(ncidsib, hrid, hour) )
+
+      do j=1, nvar
+          valuessib_temp(:,:) = valuessib(j,:,:)
+          call check ( nf90_put_var(ncidsib, varidsib(j), valuessib_temp) )
+      enddo
+
+      call check ( nf90_close(ncid) )
+      call check ( nf90_close(ncidsib) )
+
+     deallocate(time,year,month,doy,day,hour)
+     deallocate(values, values_temp)
+     deallocate(valuessib, valuessib_temp)
+
+   enddo !mon
+enddo !yr
+
+print('(a)'), 'Finished processing.'
+print*,''
+	
+end program merra_pullsib
+
+!***********************************************************************
+!***********************************************************************
+
+subroutine check(status)
+
+use netcdf
+use typeSizes
+
+implicit none
+
+integer, intent(in) :: status
+
+   if (status /= nf90_noerr) then
+      stop "Error with netcdf.  Stopped."
+   endif
+
+end subroutine check
diff --git a/preprocess/merra_pullsib_auto b/preprocess/merra_pullsib_auto
new file mode 100755
index 0000000000000000000000000000000000000000..4c3e9965c9cad53ad2a83f9e7ad724afa1e08466
Binary files /dev/null and b/preprocess/merra_pullsib_auto differ
diff --git a/preprocess/merra_pullsib_auto.f90 b/preprocess/merra_pullsib_auto.f90
new file mode 100644
index 0000000000000000000000000000000000000000..a58ee9553afb7b76253d5e99a7f22604468f7bf0
--- /dev/null
+++ b/preprocess/merra_pullsib_auto.f90
@@ -0,0 +1,306 @@
+!Program to read in gridded MERRA monthly files (lonxlat),
+!and write out monthly SiB driver files (nsib).
+!
+!To compile, use:
+!>pgf90 merra_pullsib.f90 -L/usr/local/netcdf3-pgi/lib -lnetcdf -I/usr/local/netcdf3-pgi/include -o merra_pullsib
+!
+!-or- (if defined)
+!>f90nc merra_pullsib.f90
+!>f90nco merra_pullsib.f90 merra_pullsib
+!
+!>-or-
+!>make merra_pullsib
+!
+!kdhaynes, 01/2018
+!
+program  merra_pullsib
+  
+use netcdf
+
+implicit none
+
+!!!!! user defined variables
+integer, parameter :: startYr=2018, stopYr=2018
+integer, parameter :: startmon=1, stopmon=1
+
+character(len=100), parameter :: inputdir='/projects/0/ctdas/awoude/NRT/input/'
+character(len=6), parameter :: inprefix='merra_'
+
+character(len=100), parameter :: outputdir='/projects/0/ctdas/awoude/NRT/input/'
+character(len=24), parameter :: outprefix='merra2_0.5deg_'
+
+character(len=100), parameter :: sibfile= &
+     '/projects/0/ctdas/sib4_input/vs/sib_vs_0.5deg.nc'
+
+!!!!! MERRA-specific parameters
+integer, parameter :: nvar = 10
+character(len=12), parameter, dimension(nvar) :: &
+   varname = ['tm          ','sh          ','ps          ', &
+              'spdm        ','swd         ','lwd         ', &
+              'lspr        ','cupr        ','lspr_scaled ', &
+              'cupr_scaled ']
+character(len=3), parameter, dimension(12) :: &
+   monname = ['Jan','Feb','Mar','Apr','May','Jun', &
+              'Jul','Aug','Sep','Oct','Nov','Dec']
+
+!input variables
+integer :: nlon, nlat, ntime
+real, dimension(:), allocatable :: longitude, latitude
+real*8, dimension(:), allocatable :: time
+integer, dimension(:), allocatable :: year, month, doy, day
+real, dimension(:), allocatable :: hour
+real, dimension(:,:,:), allocatable :: values_temp
+real, dimension(:,:,:,:), allocatable :: values
+
+!output variables
+integer :: nsib
+real, dimension(:), allocatable :: lonsib, latsib
+real, dimension(:,:), allocatable :: valuessib_temp
+real, dimension(:,:,:), allocatable :: valuessib
+
+!comparison variables
+real :: minlon, minlat
+real, dimension(:), allocatable :: londiff, latdiff
+integer, dimension(:), allocatable :: lonref, latref
+
+!netcdf variables
+integer ncid, dimid, varid, varidin(nvar)
+integer ncidsib, varidsib(nvar)
+integer status
+integer timedid, landid
+integer timeid, latid, lonid
+integer yrid, monid, doyid, dayid, hrid
+integer valuesid(nvar)
+character(len=30) :: monunit, dayunit
+
+!misc variables
+integer j,k,v
+integer mon, yr
+integer mystartmon, mystopmon
+character(len=120) :: filename
+character(len=20) :: varname_temp
+
+!---------------------------------------------------
+!Read in the SiB lat/lon information for land points
+call check ( nf90_open( trim(sibfile), nf90_nowrite, ncid ) )
+print*,''
+print('(a)'),'Getting SiB Information: '
+print('(a,a)'),'  ',trim(sibfile)
+print*,''
+
+call check ( nf90_inq_dimid( ncid, 'nsib', dimid ) )
+call check ( nf90_inquire_dimension( ncid, dimid, len=nsib ) )
+
+allocate(lonsib(nsib), latsib(nsib))
+call check ( nf90_inq_varid( ncid, 'lonsib', varid ) )
+call check ( nf90_get_var( ncid, varid, lonsib ) )
+
+call check ( nf90_inq_varid( ncid, 'latsib', varid ) )
+call check ( nf90_get_var( ncid, varid, latsib ) )
+
+call check ( nf90_close(ncid) )
+
+!Process the files:
+DO yr=startyr, stopyr
+   mystartmon=1
+   mystopmon=1
+   if (yr .eq. startyr) mystartmon=1
+   if (yr .eq. stopyr) mystopmon=1
+
+   DO mon=mystartmon, mystopmon
+
+      print('(a,a,a,i4)'), 'Processing ',monname(mon),' ',yr
+      
+      !Read in MERRA lat/lon
+      write(filename,'(a,a,i4.4,i2.2,a3)') &
+           trim(inputdir), trim(inprefix), yr, mon, '.nc'
+      print('(a)'),' Opening MERRA file: '
+      print('(a,a)'),'  ',trim(filename)
+
+      call check ( nf90_open( trim(filename), nf90_nowrite, ncid ) )
+
+      IF ((yr .EQ. startyr) .AND. (mon .EQ. startmon)) THEN
+          call check ( nf90_inq_dimid( ncid, 'lon', dimid ) )
+          call check ( nf90_inquire_dimension( ncid, dimid, len=nlon))
+          call check ( nf90_inq_dimid( ncid, 'lat', dimid ) )
+          call check ( nf90_inquire_dimension( ncid, dimid, len=nlat))
+
+          allocate(longitude(nlon),latitude(nlat))
+          call check ( nf90_inq_varid( ncid, 'longitude', varid ) )
+          call check ( nf90_get_var( ncid, varid, longitude ) )
+          call check ( nf90_inq_varid( ncid, 'latitude', varid ) )
+          call check ( nf90_get_var( ncid, varid, latitude ) )
+      ENDIF
+
+      call check ( nf90_inq_dimid( ncid, 'time', dimid ) )
+      call check ( nf90_inquire_dimension( ncid, dimid, len=ntime ) )
+      allocate(time(ntime))
+      allocate(year(ntime), month(ntime), doy(ntime), &
+               day(ntime), hour(ntime))
+      call check ( nf90_inq_varid( ncid, 'time', varid ) )
+      call check ( nf90_get_var( ncid, varid, time ) )
+      call check ( nf90_inq_varid( ncid, 'year', varid ) )
+      call check ( nf90_get_var( ncid, varid, year ) )
+      call check ( nf90_inq_varid( ncid, 'month', varid ) )
+      call check ( nf90_get_var( ncid, varid, month ) )
+      call check ( nf90_inq_varid( ncid, 'doy', varid ) )
+      call check ( nf90_get_var( ncid, varid, doy))
+      call check ( nf90_inq_varid( ncid, 'day', varid ) )
+      call check ( nf90_get_var( ncid, varid, day ) )
+      call check ( nf90_inq_varid( ncid, 'hour', varid ) )
+      call check ( nf90_get_var( ncid, varid, hour ) )
+
+      allocate(values_temp(nlon,nlat,ntime))
+      allocate(values(nvar,nlon,nlat,ntime))
+      DO v=1,nvar
+         varname_temp = varname(v)
+         call check ( nf90_inq_varid( ncid, varname_temp, varidin(v) ) )
+         call check ( nf90_get_var( ncid, varidin(v), values_temp) )
+         values(v,:,:,:) = values_temp(:,:,:)
+      ENDDO
+
+      !Calculate SiB4 points and references
+      IF ((yr .EQ. startyr) .AND. (mon .EQ. startmon)) THEN
+          allocate(lonref(nsib),latref(nsib))
+          allocate(londiff(nlon),latdiff(nlat))
+         
+          minlon=0.
+          minlat=0.
+          do j=1,nsib
+             londiff = abs(longitude-lonsib(j))
+             latdiff = abs(latitude-latsib(j))
+             minlon=minval(londiff)
+             minlat=minval(latdiff)
+
+             do k=1,nlon
+                if (londiff(k) .eq. minlon) lonref(j)=k
+             enddo
+             do k=1,nlat
+                if (latdiff(k) .eq. minlat) latref(j)=k
+             enddo
+          enddo !nsib
+      ENDIF
+
+      !Save the data on SiB gridpoints
+      allocate(valuessib_temp(nsib,ntime))
+      allocate(valuessib(nvar,nsib,ntime))
+      DO j=1,nsib
+         valuessib(:,j,:) = values(:,lonref(j),latref(j),:)
+      ENDDO !nsib
+
+      !Write out data to netcdf file   
+      write(filename,'(a,a,I4.4,I2.2,a3)') &
+          trim(outputdir), trim(outprefix), yr, mon, '.nc'
+      print('(a)'),' Writing output file: '
+      print('(a,a)'),'  ',trim(filename)
+
+      call check ( nf90_create(trim(filename), nf90_64bit_offset, ncidsib) )
+      call check ( nf90_def_dim(ncidsib, 'nsib', nsib, landid ) )
+      call check ( nf90_def_dim(ncidsib, 'time', ntime, timedid) )
+
+      call check ( nf90_def_var(ncidsib, 'lonsib', nf90_float, &
+                   (/landid/), lonid) )
+      call check ( nf90_put_att(ncidsib,lonid,'long_name','Vector Longitude'))
+      call check ( nf90_put_att(ncidsib,lonid,'units','degrees_east'))
+
+      call check ( nf90_def_var(ncidsib, 'latsib', nf90_float, &
+                   (/landid/), latid) )
+      call check ( nf90_put_att(ncidsib,latid,'long_name','Vector Latitude'))
+      call check ( nf90_put_att(ncidsib,latid,'units','degrees_north'))
+
+      call check ( nf90_def_var(ncidsib, 'time', nf90_double, &
+                   (/timedid/), timeid) )
+      call check ( nf90_put_att(ncidsib,timeid,'long_name','Time'))
+      call check ( nf90_put_att(ncidsib,timeid,'units','years since 0000-00-00'))
+
+      call check ( nf90_def_var(ncidsib, 'year', nf90_int, &
+                   (/timedid/), yrid) )
+      call check ( nf90_put_att(ncidsib,yrid,'long_name','Year'))
+      call check ( nf90_put_att(ncidsib,yrid,'units','year since 0000-00-00'))
+
+      call check ( nf90_def_var(ncidsib, 'month', nf90_int, &
+                   (/timedid/), monid) )
+      write(monunit,'(a,i4,a)') &
+           'month since ', yr, '-00-00'
+      call check ( nf90_put_att(ncidsib,monid,'long_name','Month'))
+      call check ( nf90_put_att(ncidsib,monid,'units',monunit) )
+
+      call check ( nf90_def_var(ncidsib, 'doy', nf90_int, &
+                   (/timedid/), doyid) )
+      write(dayunit,'(a,i4.4,a)') &
+           'days since ', yr, '-00-00'
+      call check ( nf90_put_att(ncidsib,doyid,'long_name','Day Of Year'))
+      call check ( nf90_put_att(ncidsib,doyid,'units',dayunit))
+
+      call check ( nf90_def_var(ncidsib, 'day', nf90_int, &
+                   (/timedid/), dayid) )
+      write(dayunit,'(a,i4.4,a,i2.2,a)') &
+           'days since ', yr, '-', mon, '-00'
+      call check ( nf90_put_att(ncidsib,dayid,'long_name','Day Of Month'))
+      call check ( nf90_put_att(ncidsib,dayid,'units',dayunit))
+
+      call check ( nf90_def_var(ncidsib, 'hour', nf90_float, &
+                   (/timedid/), hrid) )
+      call check ( nf90_put_att(ncidsib,hrid,'long_name','Hour'))
+      call check ( nf90_put_att(ncidsib,hrid,'units','hour of day (GMT)'))
+
+      do j=1, nvar
+         varname_temp = varname(j)
+         call check ( nf90_def_var(ncidsib, trim(varname_temp), &
+                        nf90_float, (/landid,timedid/), varidsib(j)) )
+         call check ( nf90_copy_att(ncid, varidin(j), &
+                        'long_name', ncidsib, varidsib(j)))
+         call check ( nf90_copy_att(ncid, varidin(j), &
+                        'units', ncidsib, varidsib(j)))
+         status = nf90_copy_att(ncid, varidin(j), &
+                        'title', ncidsib, varidsib(j))
+      enddo
+
+      status = nf90_enddef(ncidsib)
+
+      call check ( nf90_put_var(ncidsib, timeid, time) )
+      call check ( nf90_put_var(ncidsib, lonid, lonsib) )
+      call check ( nf90_put_var(ncidsib, latid, latsib) )
+      call check ( nf90_put_var(ncidsib, yrid, year) )
+      call check ( nf90_put_var(ncidsib, monid, month) )
+      call check ( nf90_put_var(ncidsib, doyid, doy) )
+      call check ( nf90_put_var(ncidsib, dayid, day) )
+      call check ( nf90_put_var(ncidsib, hrid, hour) )
+
+      do j=1, nvar
+          valuessib_temp(:,:) = valuessib(j,:,:)
+          call check ( nf90_put_var(ncidsib, varidsib(j), valuessib_temp) )
+      enddo
+
+      call check ( nf90_close(ncid) )
+      call check ( nf90_close(ncidsib) )
+
+     deallocate(time,year,month,doy,day,hour)
+     deallocate(values, values_temp)
+     deallocate(valuessib, valuessib_temp)
+
+   enddo !mon
+enddo !yr
+
+print('(a)'), 'Finished processing.'
+print*,''
+	
+end program merra_pullsib
+
+!***********************************************************************
+!***********************************************************************
+
+subroutine check(status)
+
+use netcdf
+use typeSizes
+
+implicit none
+
+integer, intent(in) :: status
+
+   if (status /= nf90_noerr) then
+      stop "Error with netcdf.  Stopped."
+   endif
+
+end subroutine check
diff --git a/preprocess/merra_pullsib_auto.o b/preprocess/merra_pullsib_auto.o
new file mode 100644
index 0000000000000000000000000000000000000000..5c5c669b2214ea999bb58f9791a0d06f68b0979f
Binary files /dev/null and b/preprocess/merra_pullsib_auto.o differ
diff --git a/preprocess/merra_pullvar b/preprocess/merra_pullvar
new file mode 100755
index 0000000000000000000000000000000000000000..26cbb58c8970407c756dcfacea5d4063ab07ec27
Binary files /dev/null and b/preprocess/merra_pullvar differ
diff --git a/preprocess/merra_pullvar.f90 b/preprocess/merra_pullvar.f90
new file mode 100644
index 0000000000000000000000000000000000000000..81769821cd6502b3ff978c6e138a6a95027b09c1
--- /dev/null
+++ b/preprocess/merra_pullvar.f90
@@ -0,0 +1,419 @@
+!Program to read in daily MERRA files in netcdf4,
+!and to write out gridded driver files in netcdf4,
+!including only the variables necessary for SiB.
+!
+!To compile, use:
+!>f90nc4 merra_pullvar.f90 merra_pullvar
+!
+!kdhaynes, 11/16 
+program  merra_pullvar
+  
+use netcdf
+implicit none
+
+!!!!! user defined variables
+integer, parameter :: startYr=2019, stopYr=2019
+integer, parameter :: startMon=8, stopMon=9
+character*100, parameter :: filedir='/scratch/shared/nsmith/merra_in/'
+character*100, parameter :: outdir='/scratch/shared/nsmith/merra_proc/'
+character*20, parameter :: outprefix='merra_'
+
+!!!!! MERRA defined variables for 2/3-degree by 1/2-degree hourly data
+integer, parameter :: numtimesteps = 24
+integer, parameter :: lat = 361
+integer, parameter :: lon = 576
+integer, parameter :: startDay=1
+real, parameter :: startHr = 0.5
+
+real, parameter :: initLon = -180.0
+real, parameter :: initLat = -90.0
+
+character*30, parameter :: fname_flx = 'MERRA2_400.tavg1_2d_flx_Nx.'
+character*30, parameter :: fname_rad = 'MERRA2_400.tavg1_2d_rad_Nx.'
+character*30, parameter :: fname_slv = 'MERRA2_400.tavg1_2d_slv_Nx.'
+character*4,  parameter :: suffix = '.nc4'
+
+integer, parameter :: nvar_flx = 4
+integer, parameter :: nvar_rad = 3
+integer, parameter :: nvar_slv = 5
+integer, parameter :: nvar_out = 8
+
+! file variables
+character(len=100) filename
+character(len=20), dimension(nvar_flx) :: varname_flx, units_flx
+character(len=300), dimension(nvar_flx) :: description_flx
+character(len=20), dimension(nvar_rad) :: varname_rad, units_rad
+character(len=300), dimension(nvar_rad) :: description_rad
+character(len=20), dimension(nvar_slv) :: varname_slv, units_slv
+character(len=300), dimension(nvar_slv) :: description_slv
+character(len=20), dimension(nvar_out) :: varname_out, units_out
+character(len=300), dimension(nvar_out) :: description_out
+
+real*8, dimension(lon) :: longitudein
+real*8, dimension(lat) :: latitudein
+real*4, dimension(lon) :: longitude
+real*4, dimension(lat) :: latitude
+real, dimension(lon,lat,numtimesteps) :: valuesday
+real, dimension(:,:,:,:), allocatable :: &
+   valuesmon_flx, valuesmon_rad, valuesmon_slv
+
+!output variables
+real, dimension(:,:,:), allocatable :: valuesout_temp
+real, dimension(:,:,:,:), allocatable :: valuesout
+
+!netcdf variables
+integer ncid, dimid, varid
+integer timedid, latdid, londid
+integer timeid, latid, lonid
+integer yrid, monid, doyid, dayid, hrid
+integer varid_out(nvar_out)
+integer status, dims(3)
+
+
+!time variables
+integer :: ntime
+real timeinc,dayfrac
+real*8, dimension(:), allocatable :: time
+integer, dimension(:), allocatable :: &
+      timeyr, timemon, timeday, timedoy
+real, dimension(:), allocatable :: timehr
+integer, dimension(12)  ::  dayspermon, numdays  
+character*13, dimension(12) :: monnames
+
+!misc variables
+integer j,k
+integer yr, mon, day, var
+integer count, countstart, countstop
+
+!!!!!data values
+DATA varname_flx /'PRECLSC','PRECANV','PRECCON','PRECSNO'/
+DATA varname_rad /'ALBEDO','SWGDN','LWGAB'/
+DATA varname_slv /'T2M','QV2M','PS','U10M','V10M'/
+
+DATA varname_out /'tm','sh','ps','spdm','lspr','cupr','swd','lwd'/
+DATA dayspermon /31,28,31,30,31,30,31,31,30,31,30,31/
+DATA monnames /'Jan','Feb','Mar','Apr','May','Jun', &
+               'Jul','Aug','Sep','Oct','Nov','Dec'/
+!!!!!
+
+!Set misc values
+timeinc = numtimesteps/24.
+
+!Read in MERRA lat/lon
+write(filename,'(a,a,i4.4,2i2.2,a)') &
+     trim(filedir), &  !startYr,'/', &
+     trim(fname_rad), startYr, startMon, startDay, suffix
+!print*,'Opening MERRA file: ',trim(filename)
+
+status = nf90_open(trim(filename), nf90_nowrite, ncid)
+if (status .ne. nf90_noerr) then
+   print*,'Error Opening File.'
+   print*,'File Name: '
+   print*,' ',trim(filename)
+   print*,'Status: ',status
+   stop
+endif
+status = nf90_inq_varid(ncid,'lon',varid)
+status = nf90_get_var(ncid,varid,longitudein)
+status = nf90_inq_varid(ncid,'lat',varid)
+status = nf90_get_var(ncid,varid,latitudein)
+status = nf90_close(ncid)
+
+
+!Process all specified years
+valuesday=0.
+print*,''
+do yr = startYr,stopYr
+
+   numdays = dayspermon
+   if (mod(yr,4) == 0) numdays(2) = numdays(2) + 1
+
+   do mon = startMon, stopMon
+
+      print('(a,a3,a,i4)'),'Processing ',monnames(mon),' ',yr 
+      ntime = numtimesteps*numdays(mon)
+      allocate(valuesmon_flx(nvar_flx,lon,lat,ntime))
+      allocate(valuesmon_rad(nvar_rad,lon,lat,ntime))
+      allocate(valuesmon_slv(nvar_slv,lon,lat,ntime))
+
+      valuesmon_flx = 0.
+      valuesmon_rad = 0.
+      valuesmon_slv = 0.
+
+      allocate(time(ntime),timeyr(ntime),timemon(ntime))
+      allocate(timedoy(ntime),timeday(ntime),timehr(ntime))
+       
+      time = 0.
+      timeyr = 0.
+      timemon = 0.
+      timedoy = 0.
+      timeday = 0.
+      timehr = 0.
+
+      count=1
+      do day = 1, numdays(mon)
+
+         !Set time variables
+         countstart=count
+         do j=1, numtimesteps
+            timehr(countstart) = startHr + (j-1)*timeinc
+            timeyr(countstart) = yr
+            timemon(countstart) = mon
+            timeday(countstart) = day
+            if (mon .eq. 1) then 
+               timedoy(countstart) = day
+            else
+               timedoy(countstart) = day + sum(dayspermon(1:mon-1))
+            endif
+            dayfrac = timedoy(countstart) + timehr(countstart)/24.
+            timedoy(countstart) = dayfrac
+            time(countstart) = yr + dayfrac/(sum(numdays))
+
+            countstart = countstart+1
+         enddo
+         countstart=count
+         countstop=count+numtimesteps-1
+    
+         !Open flx file
+         write(filename,'(a,a,i4.4,2i2.2,a)') &
+               trim(filedir), &  !yr, '/', & 
+               trim(fname_flx), yr, mon, day, suffix
+         !print*, 'READING: ', trim(filename)
+
+         status = nf90_open(trim(filename),nf90_nowrite,ncid)
+         if (status .ne. nf90_noerr) then
+             print*,'Error Opening File.'
+             print*,' ',trim(filename)
+             print*,'Status: ',status
+             stop
+         endif
+	 do var=1,nvar_flx
+	    status = nf90_inq_varid(ncid, trim(varname_flx(var)), varid)
+            !get variable description and units only once
+            if (day .eq. 1) then
+               status = nf90_get_att(ncid,varid,'long_name',description_flx(var))
+               status = nf90_get_att(ncid,varid,'units',units_flx(var))
+           endif
+            status = nf90_get_var(ncid,varid,valuesday)
+            if (status < 0) then
+                print*,'Error reading flx data, status =', status
+	        print*,var,trim(varname_flx(var))
+	        stop
+            endif
+
+            valuesmon_flx(var,:,:,countstart:countstop) = &
+                 valuesday(:,:,1:numtimesteps)
+
+	 enddo  !var
+         status = nf90_close(ncid)
+
+         !Open rad file
+         write(filename,'(a,a,i4.4,2i2.2,a)') &
+               trim(filedir), &  !yr, '/', &
+               trim(fname_rad), yr, mon, day, suffix
+         !print*,'READING: ',trim(filename)
+
+         status = nf90_open(trim(filename), nf90_nowrite, ncid)
+         if (status .ne. nf90_noerr) then
+            print*,'Error Opening File.'
+            print*,' ',trim(filename)
+            print*,'Status: ',status
+         endif
+         do var=1,nvar_rad
+            status = nf90_inq_varid(ncid,trim(varname_rad(var)),varid)
+
+            !get variable description and units only once
+            if (mon .eq. 1 .and. day .eq. 1) then
+               status = nf90_get_att(ncid,varid,'long_name',description_rad(var))
+               status = nf90_get_att(ncid,varid,'units',units_rad(var))
+            endif
+            status = nf90_get_var(ncid,varid,valuesday)
+            if (status < 0) then
+               print*,'Error reading rad data, status=',status
+               print*,var,trim(varname_rad(var))
+               stop
+            endif
+
+            valuesmon_rad(var,:,:,countstart:countstop) = &
+                valuesday(:,:,1:numtimesteps)
+
+         enddo !var
+         status = nf90_close(ncid)
+
+         !Open slv file
+         write(filename,'(a,a,i4.4,2i2.2,a)') &
+               trim(filedir), &  !yr, '/', &
+               trim(fname_slv), yr, mon, day, suffix
+         !print*,'READING: ', trim(filename)
+
+         status = nf90_open(trim(filename),nf90_nowrite,ncid)
+         if (status .ne. nf90_noerr) then
+             print*,'Error Opening File.'
+             print*,' ',trim(filename)
+             print*,'Status: ',status
+         endif
+         do var=1,nvar_slv
+            status = nf90_inq_varid(ncid,trim(varname_slv(var)),varid)
+ 
+            !get variable description and units only once
+            if (mon .eq. 1 .and. day .eq. 1) then
+               status = nf90_get_att(ncid,varid,'long_name',description_slv(var))
+               status = nf90_get_att(ncid,varid,'units',units_slv(var))
+            endif
+            status = nf90_get_var(ncid,varid,valuesday)
+            if (status < 0) then
+               print*,'Error reading slv data, status =',status
+               print*, var, trim(varname_slv(var))
+               stop
+            endif
+            valuesmon_slv(var,:,:,countstart:countstop) = &
+                valuesday(:,:,1:numtimesteps)
+
+         enddo  !var
+         status = nf90_close(ncid)
+
+         count = count + numtimesteps
+      enddo !day
+
+      !Save the gridded data
+      allocate(valuesout_temp(lon,lat,ntime))
+      allocate(valuesout(nvar_out,lon,lat,ntime))
+
+      units_out(1) = 'K'
+      description_out(1) = description_slv(1)
+      units_out(2) = 'kg/kg'
+      description_out(2) = description_slv(2)
+      units_out(3) = 'mb'
+      description_out(3) = description_slv(3)
+      units_out(4) = 'm/s'
+      description_out(4) = 'Wind Speed at 10 m'
+      units_out(5) = 'mm/s'
+      description_out(5) = 'Large Scale Precipitation (with snow)'
+      units_out(6) = 'mm/s'
+      description_out(6) = 'Convective Precipitation'
+      units_out(7) = 'W/m2'
+      description_out(7) = 'Surface solar radiation downwards'
+      units_out(8) = 'W/m2'
+      description_out(8) = 'Surface thermal radiation downwards'
+
+      valuesout(1,:,:,:) = valuesmon_slv(1,:,:,:)
+      valuesout(2,:,:,:) = valuesmon_slv(2,:,:,:)
+      !convert pressure from Pa to mb    
+      valuesout(3,:,:,:) = valuesmon_slv(3,:,:,:)/100.
+      !calculate wind from components
+      valuesout(4,:,:,:) = SQRT( &
+         valuesmon_slv(4,:,:,:)*valuesmon_slv(4,:,:,:) + &
+         valuesmon_slv(5,:,:,:)*valuesmon_slv(5,:,:,:))
+      !combine large scale and snow precipitation
+      valuesout(5,:,:,:) = valuesmon_flx(1,:,:,:) + &
+                           valuesmon_flx(4,:,:,:)
+      !combine convective and anvil precipitation
+      valuesout(6,:,:,:) = valuesmon_flx(2,:,:,:) + &
+                           valuesmon_flx(3,:,:,:)
+      valuesout(7,:,:,:) = valuesmon_rad(2,:,:,:)
+         !...if necessary, calculate net downward shortwave radiation 
+         !...by dividing by (1.-albedo)
+         !valuesout(7,j,:) = valuesmon_rad(2,lonref(j),latref(j),:) / &
+         !                   (1-valuesmon_rad(1,lonref(j),latref(j),:))
+      valuesout(8,:,:,:) = valuesmon_rad(3,:,:,:)
+
+      !Write out data to netcdf file   
+      write(filename,'(a,a,I4.4,I2.2,a3)') &
+          trim(outdir), trim(outprefix), yr, mon, '.nc'
+      print*,'Writing output file: ',trim(filename)
+
+      call check ( nf90_create(trim(filename), &
+                   nf90_64bit_offset, ncid) )
+
+      call check ( nf90_def_dim(ncid,'lon',lon,londid))
+      call check ( nf90_def_dim(ncid,'lat',lat,latdid))
+      call check ( nf90_def_dim(ncid, 'time', ntime, timedid) )
+
+      call check ( nf90_def_var(ncid, 'longitude', nf90_float, &
+                   (/londid/), lonid) )
+      call check ( nf90_def_var(ncid, 'latitude', nf90_float, &
+                   (/latdid/), latid) )
+      call check ( nf90_def_var(ncid, 'time', nf90_double, &
+                   (/timedid/), timeid))
+
+      call check ( nf90_def_var(ncid, 'year', nf90_int, &
+                   (/timedid/), yrid) )
+      call check ( nf90_def_var(ncid, 'month', nf90_int, &
+                   (/timedid/), monid) )
+      call check ( nf90_def_var(ncid, 'doy', nf90_int, &
+                   (/timedid/), doyid) )
+
+      call check ( nf90_def_var(ncid, 'day', nf90_int, &
+                   (/timedid/), dayid) )
+      call check ( nf90_def_var(ncid, 'hour', nf90_float, &
+                   (/timedid/), hrid) )
+
+      dims(1) = londid
+      dims(2) = latdid
+      dims(3) = timedid
+
+      do j=1, nvar_out
+         call check ( nf90_def_var(ncid, trim(varname_out(j)), &
+                        nf90_float, dims, varid_out(j)) )
+         call check ( nf90_put_att(ncid, varid_out(j), &
+                        'long_name', trim(description_out(j))) )
+         call check ( nf90_put_att(ncid, varid_out(j), &
+                        'units',trim(units_out(j))) )
+         call check ( nf90_put_att(ncid, varid_out(j), &
+                        'missing_value', 1.e15) )
+         call check ( nf90_put_att(ncid, varid_out(j), &
+                        '_FillValue', 1.e15) )
+      enddo
+
+     call check ( nf90_enddef(ncid) )
+
+     longitude=longitudein
+     call check ( nf90_put_var(ncid, lonid, longitude) )
+
+     latitude=latitudein
+     call check ( nf90_put_var(ncid, latid, latitude) )
+
+     call check ( nf90_put_var(ncid, timeid, time))
+     call check ( nf90_put_var(ncid, yrid, timeyr) )
+     call check ( nf90_put_var(ncid, monid, timemon) )
+     call check ( nf90_put_var(ncid, doyid, timedoy) )
+     call check ( nf90_put_var(ncid, dayid, timeday) )
+     call check ( nf90_put_var(ncid, hrid, timehr) )
+
+     do j=1, nvar_out
+        valuesout_temp(:,:,:) = valuesout(j,:,:,:)
+        call check ( nf90_put_var(ncid, varid_out(j), valuesout_temp) )
+     enddo
+
+     call check ( nf90_close(ncid) )
+
+     deallocate(valuesmon_flx, valuesmon_rad, valuesmon_slv)
+     deallocate(time,timeyr,timemon,timedoy,timeday,timehr)
+     deallocate(valuesout,valuesout_temp)
+
+   enddo !mon
+enddo !yr
+	
+print*,'Finished Processing'
+print*,''
+
+end program merra_pullvar
+
+!***********************************************************************
+!***********************************************************************
+
+subroutine check(status)
+
+use netcdf
+use typeSizes
+
+implicit none
+
+integer, intent(in) :: status
+
+   if (status /= nf90_noerr) then
+      stop "Error with netcdf.  Stopped."
+   endif
+
+end subroutine check
+
diff --git a/preprocess/merra_pullvar_auto b/preprocess/merra_pullvar_auto
new file mode 100755
index 0000000000000000000000000000000000000000..07e0f0712447bc5abcf1eda76234def4e1d20a4f
Binary files /dev/null and b/preprocess/merra_pullvar_auto differ
diff --git a/preprocess/merra_pullvar_auto.f90 b/preprocess/merra_pullvar_auto.f90
new file mode 100644
index 0000000000000000000000000000000000000000..49e3805e5cef717ea9bc1c543670e611ace098a1
--- /dev/null
+++ b/preprocess/merra_pullvar_auto.f90
@@ -0,0 +1,419 @@
+!Program to read in daily MERRA files in netcdf4,
+!and to write out gridded driver files in netcdf4,
+!including only the variables necessary for SiB.
+!
+!To compile, use:
+!>f90nc4 merra_pullvar.f90 merra_pullvar
+!
+!kdhaynes, 11/16 
+program  merra_pullvar
+  
+use netcdf
+implicit none
+
+!!!!! user defined variables
+integer, parameter :: startYr=2018, stopYr=2018
+integer, parameter :: startMon=1, stopMon=1
+character*100, parameter :: filedir='/scratch/shared/awoude//MERRA/'
+character*100, parameter :: outdir='/projects/0/ctdas/awoude/NRT/input/'
+character*20, parameter :: outprefix='merra_'
+
+!!!!! MERRA defined variables for 2/3-degree by 1/2-degree hourly data
+integer, parameter :: numtimesteps = 24
+integer, parameter :: lat = 361
+integer, parameter :: lon = 576
+integer, parameter :: startDay=1
+real, parameter :: startHr = 0.5
+
+real, parameter :: initLon = -180.0
+real, parameter :: initLat = -90.0
+
+character*30, parameter :: fname_flx = 'MERRA2_400.tavg1_2d_flx_Nx.'
+character*30, parameter :: fname_rad = 'MERRA2_400.tavg1_2d_rad_Nx.'
+character*30, parameter :: fname_slv = 'MERRA2_400.tavg1_2d_slv_Nx.'
+character*4,  parameter :: suffix = '.nc4'
+
+integer, parameter :: nvar_flx = 4
+integer, parameter :: nvar_rad = 3
+integer, parameter :: nvar_slv = 5
+integer, parameter :: nvar_out = 8
+
+! file variables
+character(len=100) filename
+character(len=20), dimension(nvar_flx) :: varname_flx, units_flx
+character(len=300), dimension(nvar_flx) :: description_flx
+character(len=20), dimension(nvar_rad) :: varname_rad, units_rad
+character(len=300), dimension(nvar_rad) :: description_rad
+character(len=20), dimension(nvar_slv) :: varname_slv, units_slv
+character(len=300), dimension(nvar_slv) :: description_slv
+character(len=20), dimension(nvar_out) :: varname_out, units_out
+character(len=300), dimension(nvar_out) :: description_out
+
+real*8, dimension(lon) :: longitudein
+real*8, dimension(lat) :: latitudein
+real*4, dimension(lon) :: longitude
+real*4, dimension(lat) :: latitude
+real, dimension(lon,lat,numtimesteps) :: valuesday
+real, dimension(:,:,:,:), allocatable :: &
+   valuesmon_flx, valuesmon_rad, valuesmon_slv
+
+!output variables
+real, dimension(:,:,:), allocatable :: valuesout_temp
+real, dimension(:,:,:,:), allocatable :: valuesout
+
+!netcdf variables
+integer ncid, dimid, varid
+integer timedid, latdid, londid
+integer timeid, latid, lonid
+integer yrid, monid, doyid, dayid, hrid
+integer varid_out(nvar_out)
+integer status, dims(3)
+
+
+!time variables
+integer :: ntime
+real timeinc,dayfrac
+real*8, dimension(:), allocatable :: time
+integer, dimension(:), allocatable :: &
+      timeyr, timemon, timeday, timedoy
+real, dimension(:), allocatable :: timehr
+integer, dimension(12)  ::  dayspermon, numdays  
+character*13, dimension(12) :: monnames
+
+!misc variables
+integer j,k
+integer yr, mon, day, var
+integer count, countstart, countstop
+
+!!!!!data values
+DATA varname_flx /'PRECLSC','PRECANV','PRECCON','PRECSNO'/
+DATA varname_rad /'ALBEDO','SWGDN','LWGAB'/
+DATA varname_slv /'T2M','QV2M','PS','U10M','V10M'/
+
+DATA varname_out /'tm','sh','ps','spdm','lspr','cupr','swd','lwd'/
+DATA dayspermon /31,28,31,30,31,30,31,31,30,31,30,31/
+DATA monnames /'Jan','Feb','Mar','Apr','May','Jun', &
+               'Jul','Aug','Sep','Oct','Nov','Dec'/
+!!!!!
+
+!Set misc values
+timeinc = numtimesteps/24.
+
+!Read in MERRA lat/lon
+write(filename,'(a,a,i4.4,2i2.2,a)') &
+     trim(filedir), &  !startYr,'/', &
+     trim(fname_rad), startYr, startMon, startDay, suffix
+!print*,'Opening MERRA file: ',trim(filename)
+
+status = nf90_open(trim(filename), nf90_nowrite, ncid)
+if (status .ne. nf90_noerr) then
+   print*,'Error Opening File.'
+   print*,'File Name: '
+   print*,' ',trim(filename)
+   print*,'Status: ',status
+   stop
+endif
+status = nf90_inq_varid(ncid,'lon',varid)
+status = nf90_get_var(ncid,varid,longitudein)
+status = nf90_inq_varid(ncid,'lat',varid)
+status = nf90_get_var(ncid,varid,latitudein)
+status = nf90_close(ncid)
+
+
+!Process all specified years
+valuesday=0.
+print*,''
+do yr = startYr,stopYr
+
+   numdays = dayspermon
+   if (mod(yr,4) == 0) numdays(2) = numdays(2) + 1
+
+   do mon = startMon, stopMon
+
+      print('(a,a3,a,i4)'),'Processing ',monnames(mon),' ',yr 
+      ntime = numtimesteps*numdays(mon)
+      allocate(valuesmon_flx(nvar_flx,lon,lat,ntime))
+      allocate(valuesmon_rad(nvar_rad,lon,lat,ntime))
+      allocate(valuesmon_slv(nvar_slv,lon,lat,ntime))
+
+      valuesmon_flx = 0.
+      valuesmon_rad = 0.
+      valuesmon_slv = 0.
+
+      allocate(time(ntime),timeyr(ntime),timemon(ntime))
+      allocate(timedoy(ntime),timeday(ntime),timehr(ntime))
+       
+      time = 0.
+      timeyr = 0.
+      timemon = 0.
+      timedoy = 0.
+      timeday = 0.
+      timehr = 0.
+
+      count=1
+      do day = 1, numdays(mon)
+
+         !Set time variables
+         countstart=count
+         do j=1, numtimesteps
+            timehr(countstart) = startHr + (j-1)*timeinc
+            timeyr(countstart) = yr
+            timemon(countstart) = mon
+            timeday(countstart) = day
+            if (mon .eq. 1) then 
+               timedoy(countstart) = day
+            else
+               timedoy(countstart) = day + sum(dayspermon(1:mon-1))
+            endif
+            dayfrac = timedoy(countstart) + timehr(countstart)/24.
+            timedoy(countstart) = dayfrac
+            time(countstart) = yr + dayfrac/(sum(numdays))
+
+            countstart = countstart+1
+         enddo
+         countstart=count
+         countstop=count+numtimesteps-1
+    
+         !Open flx file
+         write(filename,'(a,a,i4.4,2i2.2,a)') &
+               trim(filedir), &  !yr, '/', & 
+               trim(fname_flx), yr, mon, day, suffix
+         !print*, 'READING: ', trim(filename)
+
+         status = nf90_open(trim(filename),nf90_nowrite,ncid)
+         if (status .ne. nf90_noerr) then
+             print*,'Error Opening File.'
+             print*,' ',trim(filename)
+             print*,'Status: ',status
+             stop
+         endif
+	 do var=1,nvar_flx
+	    status = nf90_inq_varid(ncid, trim(varname_flx(var)), varid)
+            !get variable description and units only once
+            if (day .eq. 1) then
+               status = nf90_get_att(ncid,varid,'long_name',description_flx(var))
+               status = nf90_get_att(ncid,varid,'units',units_flx(var))
+           endif
+            status = nf90_get_var(ncid,varid,valuesday)
+            if (status < 0) then
+                print*,'Error reading flx data, status =', status
+	        print*,var,trim(varname_flx(var))
+	        stop
+            endif
+
+            valuesmon_flx(var,:,:,countstart:countstop) = &
+                 valuesday(:,:,1:numtimesteps)
+
+	 enddo  !var
+         status = nf90_close(ncid)
+
+         !Open rad file
+         write(filename,'(a,a,i4.4,2i2.2,a)') &
+               trim(filedir), &  !yr, '/', &
+               trim(fname_rad), yr, mon, day, suffix
+         !print*,'READING: ',trim(filename)
+
+         status = nf90_open(trim(filename), nf90_nowrite, ncid)
+         if (status .ne. nf90_noerr) then
+            print*,'Error Opening File.'
+            print*,' ',trim(filename)
+            print*,'Status: ',status
+         endif
+         do var=1,nvar_rad
+            status = nf90_inq_varid(ncid,trim(varname_rad(var)),varid)
+
+            !get variable description and units only once
+            if (mon .eq. 1 .and. day .eq. 1) then
+               status = nf90_get_att(ncid,varid,'long_name',description_rad(var))
+               status = nf90_get_att(ncid,varid,'units',units_rad(var))
+            endif
+            status = nf90_get_var(ncid,varid,valuesday)
+            if (status < 0) then
+               print*,'Error reading rad data, status=',status
+               print*,var,trim(varname_rad(var))
+               stop
+            endif
+
+            valuesmon_rad(var,:,:,countstart:countstop) = &
+                valuesday(:,:,1:numtimesteps)
+
+         enddo !var
+         status = nf90_close(ncid)
+
+         !Open slv file
+         write(filename,'(a,a,i4.4,2i2.2,a)') &
+               trim(filedir), &  !yr, '/', &
+               trim(fname_slv), yr, mon, day, suffix
+         !print*,'READING: ', trim(filename)
+
+         status = nf90_open(trim(filename),nf90_nowrite,ncid)
+         if (status .ne. nf90_noerr) then
+             print*,'Error Opening File.'
+             print*,' ',trim(filename)
+             print*,'Status: ',status
+         endif
+         do var=1,nvar_slv
+            status = nf90_inq_varid(ncid,trim(varname_slv(var)),varid)
+ 
+            !get variable description and units only once
+            if (mon .eq. 1 .and. day .eq. 1) then
+               status = nf90_get_att(ncid,varid,'long_name',description_slv(var))
+               status = nf90_get_att(ncid,varid,'units',units_slv(var))
+            endif
+            status = nf90_get_var(ncid,varid,valuesday)
+            if (status < 0) then
+               print*,'Error reading slv data, status =',status
+               print*, var, trim(varname_slv(var))
+               stop
+            endif
+            valuesmon_slv(var,:,:,countstart:countstop) = &
+                valuesday(:,:,1:numtimesteps)
+
+         enddo  !var
+         status = nf90_close(ncid)
+
+         count = count + numtimesteps
+      enddo !day
+
+      !Save the gridded data
+      allocate(valuesout_temp(lon,lat,ntime))
+      allocate(valuesout(nvar_out,lon,lat,ntime))
+
+      units_out(1) = 'K'
+      description_out(1) = description_slv(1)
+      units_out(2) = 'kg/kg'
+      description_out(2) = description_slv(2)
+      units_out(3) = 'mb'
+      description_out(3) = description_slv(3)
+      units_out(4) = 'm/s'
+      description_out(4) = 'Wind Speed at 10 m'
+      units_out(5) = 'mm/s'
+      description_out(5) = 'Large Scale Precipitation (with snow)'
+      units_out(6) = 'mm/s'
+      description_out(6) = 'Convective Precipitation'
+      units_out(7) = 'W/m2'
+      description_out(7) = 'Surface solar radiation downwards'
+      units_out(8) = 'W/m2'
+      description_out(8) = 'Surface thermal radiation downwards'
+
+      valuesout(1,:,:,:) = valuesmon_slv(1,:,:,:)
+      valuesout(2,:,:,:) = valuesmon_slv(2,:,:,:)
+      !convert pressure from Pa to mb    
+      valuesout(3,:,:,:) = valuesmon_slv(3,:,:,:)/100.
+      !calculate wind from components
+      valuesout(4,:,:,:) = SQRT( &
+         valuesmon_slv(4,:,:,:)*valuesmon_slv(4,:,:,:) + &
+         valuesmon_slv(5,:,:,:)*valuesmon_slv(5,:,:,:))
+      !combine large scale and snow precipitation
+      valuesout(5,:,:,:) = valuesmon_flx(1,:,:,:) + &
+                           valuesmon_flx(4,:,:,:)
+      !combine convective and anvil precipitation
+      valuesout(6,:,:,:) = valuesmon_flx(2,:,:,:) + &
+                           valuesmon_flx(3,:,:,:)
+      valuesout(7,:,:,:) = valuesmon_rad(2,:,:,:)
+         !...if necessary, calculate net downward shortwave radiation 
+         !...by dividing by (1.-albedo)
+         !valuesout(7,j,:) = valuesmon_rad(2,lonref(j),latref(j),:) / &
+         !                   (1-valuesmon_rad(1,lonref(j),latref(j),:))
+      valuesout(8,:,:,:) = valuesmon_rad(3,:,:,:)
+
+      !Write out data to netcdf file   
+      write(filename,'(a,a,I4.4,I2.2,a3)') &
+          trim(outdir), trim(outprefix), yr, mon, '.nc'
+      print*,'Writing output file: ',trim(filename)
+
+      call check ( nf90_create(trim(filename), &
+                   nf90_64bit_offset, ncid) )
+
+      call check ( nf90_def_dim(ncid,'lon',lon,londid))
+      call check ( nf90_def_dim(ncid,'lat',lat,latdid))
+      call check ( nf90_def_dim(ncid, 'time', ntime, timedid) )
+
+      call check ( nf90_def_var(ncid, 'longitude', nf90_float, &
+                   (/londid/), lonid) )
+      call check ( nf90_def_var(ncid, 'latitude', nf90_float, &
+                   (/latdid/), latid) )
+      call check ( nf90_def_var(ncid, 'time', nf90_double, &
+                   (/timedid/), timeid))
+
+      call check ( nf90_def_var(ncid, 'year', nf90_int, &
+                   (/timedid/), yrid) )
+      call check ( nf90_def_var(ncid, 'month', nf90_int, &
+                   (/timedid/), monid) )
+      call check ( nf90_def_var(ncid, 'doy', nf90_int, &
+                   (/timedid/), doyid) )
+
+      call check ( nf90_def_var(ncid, 'day', nf90_int, &
+                   (/timedid/), dayid) )
+      call check ( nf90_def_var(ncid, 'hour', nf90_float, &
+                   (/timedid/), hrid) )
+
+      dims(1) = londid
+      dims(2) = latdid
+      dims(3) = timedid
+
+      do j=1, nvar_out
+         call check ( nf90_def_var(ncid, trim(varname_out(j)), &
+                        nf90_float, dims, varid_out(j)) )
+         call check ( nf90_put_att(ncid, varid_out(j), &
+                        'long_name', trim(description_out(j))) )
+         call check ( nf90_put_att(ncid, varid_out(j), &
+                        'units',trim(units_out(j))) )
+         call check ( nf90_put_att(ncid, varid_out(j), &
+                        'missing_value', 1.e15) )
+         call check ( nf90_put_att(ncid, varid_out(j), &
+                        '_FillValue', 1.e15) )
+      enddo
+
+     call check ( nf90_enddef(ncid) )
+
+     longitude=longitudein
+     call check ( nf90_put_var(ncid, lonid, longitude) )
+
+     latitude=latitudein
+     call check ( nf90_put_var(ncid, latid, latitude) )
+
+     call check ( nf90_put_var(ncid, timeid, time))
+     call check ( nf90_put_var(ncid, yrid, timeyr) )
+     call check ( nf90_put_var(ncid, monid, timemon) )
+     call check ( nf90_put_var(ncid, doyid, timedoy) )
+     call check ( nf90_put_var(ncid, dayid, timeday) )
+     call check ( nf90_put_var(ncid, hrid, timehr) )
+
+     do j=1, nvar_out
+        valuesout_temp(:,:,:) = valuesout(j,:,:,:)
+        call check ( nf90_put_var(ncid, varid_out(j), valuesout_temp) )
+     enddo
+
+     call check ( nf90_close(ncid) )
+
+     deallocate(valuesmon_flx, valuesmon_rad, valuesmon_slv)
+     deallocate(time,timeyr,timemon,timedoy,timeday,timehr)
+     deallocate(valuesout,valuesout_temp)
+
+   enddo !mon
+enddo !yr
+	
+print*,'Finished Processing'
+print*,''
+
+end program merra_pullvar
+
+!***********************************************************************
+!***********************************************************************
+
+subroutine check(status)
+
+use netcdf
+use typeSizes
+
+implicit none
+
+integer, intent(in) :: status
+
+   if (status /= nf90_noerr) then
+      stop "Error with netcdf.  Stopped."
+   endif
+
+end subroutine check
+
diff --git a/preprocess/merra_pullvar_auto.o b/preprocess/merra_pullvar_auto.o
new file mode 100644
index 0000000000000000000000000000000000000000..77c6c477814a2ececfb95bee519a8b2c6e90a646
Binary files /dev/null and b/preprocess/merra_pullvar_auto.o differ
diff --git a/preprocess/proc_merra2_ges_disc.sh b/preprocess/proc_merra2_ges_disc.sh
new file mode 100755
index 0000000000000000000000000000000000000000..1bb0441784a6516b551ba18f57b7b6f140f509d0
--- /dev/null
+++ b/preprocess/proc_merra2_ges_disc.sh
@@ -0,0 +1,180 @@
+#!/bin/sh
+#------------------------------------------------------------------------------
+# NASA/GSFC, Computational and Information Science and Technology Office,
+# Code 606
+#------------------------------------------------------------------------------
+#
+# SCRIPT: proc_merra2_ges_disc.sh
+#
+# AUTHOR:
+# Eric Kemp, NASA CISTO/SSAI
+#
+# DESCRIPTION:
+# Script for fetching MERRA2 data from NASA GES DISC web site for use by
+# MERRA2WRF. Requires wget utility and Get_dates_daily.py script. Based on 
+# Jossy Jacob's Run_MERRA2.csh script.
+#
+# REVISION HISTORY:
+# 18 Sep 2015 - First version.
+#
+#------------------------------------------------------------------------------
+
+# Process command line arguments.
+if [ "$#" -ne 4 ] ; then
+    echo 'Usage: proc_merra2_ges_disc.sh STARTDATE ENDDATE RUNDIR NUWRFDIR'
+    echo 'Example: ./proc_merra2_ges_disc.sh 19890101 19890104 MERRA_data /path/to/nuwrf'
+    exit 1
+fi
+STARTDATE=$1
+ENDDATE=$2
+RUNDIR=$3
+NUWRFDIR=$4
+
+# Set WORKDIR and ensure it is an absolute path. Create directory and 
+# subdirectories as needed.
+WORKDIR="$RUNDIR"
+if [ ! -e $WORKDIR ] ; then
+    mkdir $WORKDIR || exit 1
+fi
+cd $WORKDIR
+WORKDIR=`pwd` # Absolute path.
+if [ ! -e $WORKDIR/m2wIn ] ; then
+    mkdir $WORKDIR/m2wIn || exit 1
+fi
+if [ ! -e $WORKDIR/m2wOut ] ; then
+    mkdir $WORKDIR/m2wOut || exit 1
+fi
+
+# Link executables from NUWRFDIR
+#ln -fs $NUWRFDIR/utils/geos2wrf_2/merra2wrf $WORKDIR/merra2wrf || exit 1
+ln -fs $NUWRFDIR/merra2wrf $WORKDIR/merra2wrf || exit 1
+if [ ! -e $WORKDIR/merra2wrf ] ; then
+    echo Line 52
+    echo "ERROR, $WORKDIR/merra2wrf does not exist!"
+    exit 1
+fi
+ln -fs $NUWRFDIR/RUN_MERRA2/Get_dates_daily.py \
+   $WORKDIR/Get_dates_daily.py || exit 1
+if [ ! -e $WORKDIR/Get_dates_daily.py ] ; then
+    echo "ERROR, $WORKDIR/Get_dates_daily.py does not exist!"
+    exit 1
+fi
+
+# Construct list of dates.
+cd $WORKDIR || exit 1
+DT=1 # Day
+$WORKDIR/Get_dates_daily.py $STARTDATE $ENDDATE $DT || exit 1
+if [ ! -e "$WORKDIR/Datetime.dat" ] ; then
+    echo "ERROR, Datetime.dat not generated!"
+    exit 1
+fi
+
+# Get const_2d_asm_Nx file. This is used for all dates.
+cd $WORKDIR/m2wIn || exit 1
+# Updated 21 March 2016
+#file1=MERRA2_100.const_2d_asm_Nx.00000000.nc4 
+file1=MERRA2_101.const_2d_asm_Nx.00000000.nc4 
+if [ ! -e "$file1" ] ; then
+    WEBSITE=http://goldsmr4.gesdisc.eosdis.nasa.gov/
+    path=data/s4pa/MERRA2_MONTHLY/M2C0NXASM.5.12.4/1980/$file1
+    wget $WEBSITE/$path || exit 1
+fi
+
+# Loop through the dates, fetch date specific files, and run MERRA2WRF.
+for date in $(cat $WORKDIR/Datetime.dat) ; do
+
+    YEAR=`echo $date | cut -c1-4`
+    MONTH=`echo $date | cut -c5-6`
+    DAY=`echo $date | cut -c7-8`
+
+    # File prefix depends on MERRA2 "data stream" which depends on year.
+    if [ "$YEAR" -lt 1992 ] ; then
+	MERRANAME="MERRA2_100"
+    elif [ "$YEAR" -lt 2001 ] ; then
+	MERRANAME="MERRA2_200"
+    elif [ "$YEAR" -lt 2011 ] ; then
+	MERRANAME="MERRA2_300"
+    else
+	MERRANAME="MERRA2_400"
+    fi
+
+    # Get inst6_3d_ana_Nv file.
+    echo Get inst6_3d_ana_Nv file.\n
+    file2=$MERRANAME.inst6_3d_ana_Nv.$YEAR$MONTH$DAY.nc4
+    if [ ! -e "$file2" ] ; then
+	WEBSITE=http://goldsmr5.gesdisc.eosdis.nasa.gov/
+	path=data/MERRA2/M2I6NVANA.5.12.4/$YEAR/$MONTH/$file2
+	wget $WEBSITE/$path || exit 1
+    fi
+
+    # Get inst6_3d_ana_Np file.
+    echo Get inst6_3d_ana_Np file.\n
+    file3=$MERRANAME.inst6_3d_ana_Np.$YEAR$MONTH$DAY.nc4
+    if [ ! -e "$file3" ] ; then
+	WEBSITE=http://goldsmr5.gesdisc.eosdis.nasa.gov/
+	path=data/MERRA2/M2I6NPANA.5.12.4/$YEAR/$MONTH/$file3
+	wget $WEBSITE/$path || exit 1
+    fi
+
+    # Get tavg1_2d_slv_Nx file.
+    echo Get tavg1_2d_slv_Nx file.\n
+    file4=$MERRANAME.tavg1_2d_slv_Nx.$YEAR$MONTH$DAY.nc4
+    if [ ! -e "$file4" ] ; then
+	WEBSITE=http://goldsmr4.gesdisc.eosdis.nasa.gov/
+	path=data/MERRA2/M2T1NXSLV.5.12.4/$YEAR/$MONTH/$file4
+	wget $WEBSITE/$path || exit 1
+    fi
+
+    # Get tavg1_2d_ocn_Nx file.
+    echo Get tavg1_2d_ocn_Nx file.\n
+    file5=$MERRANAME.tavg1_2d_ocn_Nx.$YEAR$MONTH$DAY.nc4
+    if [ ! -e "$file5" ] ; then
+	WEBSITE=http://goldsmr4.gesdisc.eosdis.nasa.gov
+	path=data/MERRA2/M2T1NXOCN.5.12.4/$YEAR/$MONTH/$file5
+	wget $WEBSITE/$path || exit 1
+    fi
+    
+    MERRADATE="$YEAR-$MONTH-$DAY"
+    MERRADATE2="$YEAR$MONTH$DAY"
+
+    # Now run MERRA2WRF for the collected data.
+    cd $WORKDIR || exit 1
+    cat > namelist.merra2wrf_daily <<EOF
+&input
+    outputDirectory = '$WORKDIR/m2wOut',
+    merraDirectory = '$WORKDIR/m2wIn',
+    merraFormat_const_2d_asm_Nx = 2,
+    merraFile_const_2d_asm_Nx = '$file1',
+    numberOfDays=1,
+    merraDates(1)="$MERRADATE",
+    merraFormat_inst6_3d_ana_Nv = 2,
+    merraFiles_inst6_3d_ana_Nv(1) = '$file2',
+    merraFormat_inst6_3d_ana_Np = 2,
+    merraFiles_inst6_3d_ana_Np(1) = '$file3',
+    merraFormat_tavg1_2d_slv_Nx = 2,
+    merraFiles_tavg1_2d_slv_Nx(1) = '$file4',
+    merraFormat_tavg1_2d_ocn_Nx = 2,
+    merraFiles_tavg1_2d_ocn_Nx(1) = '$file5',
+/
+EOF
+    $WORKDIR/merra2wrf namelist.merra2wrf_daily || exit 1
+
+    # Daily file cleanup.
+    rm $WORKDIR/m2wIn/$file2
+    rm $WORKDIR/m2wIn/$file3
+    rm $WORKDIR/m2wIn/$file4
+    rm $WORKDIR/m2wIn/$file5
+
+    cd $WORKDIR/m2wIn || exit 1
+
+done
+
+# Final file cleanup.
+rm $WORKDIR/m2wIn/$file1
+
+# The End.
+echo "MERRA2WRF output files are in $WORKDIR/m2wOut"
+echo "Completed MERRA2 processing"
+exit 0
+
+
diff --git a/preprocess/scale_merra b/preprocess/scale_merra
new file mode 100755
index 0000000000000000000000000000000000000000..2d1e7c0a2b8d01c7afd60a2cba05dc26d0043b25
Binary files /dev/null and b/preprocess/scale_merra differ
diff --git a/preprocess/scale_merra_gpcp.f90 b/preprocess/scale_merra_gpcp.f90
new file mode 100644
index 0000000000000000000000000000000000000000..421343e6cdc20e76be3db50013ab765b5b37d3d6
--- /dev/null
+++ b/preprocess/scale_merra_gpcp.f90
@@ -0,0 +1,388 @@
+!Program to change the precipitation values for the SiB driver files
+!and scale them to GPCP precipitation.
+!
+!Program finds the ratio between the MERRA and GPCP precipitation
+!and multiplies by this ratio to 'scale' the precip.
+!
+!MERRA precip units assumed to be mm/s, with hourly data
+!GPCP precip units assumed to be mm/month, with monthly data
+!  --Expects GPCP to be regridded to MERRA resolution!!
+!
+!Program will not change the timing nor 'create' precip in MERRA.
+! 
+!NOTE:  This will actually change the netcdf file!
+!
+!To compile, use:
+!>pgf90 scale_merra_gpcp.f90 -L/usr/local/netcdf3-pgi/lib -lnetcdf -I/usr/local/netcdf3-pgi/include -o scale_merra_gpcp
+!
+!-or- (if defined)
+!>f90nc scale_merra_gpcp.f90
+!>f90nco scale_merra_gpcp.f90 scale_merra_gpcp
+!
+!-or-
+!>make scale_merra_gpcp
+!
+!kdhaynes, 01/2018
+
+program scale_merra_gpcp
+
+use netcdf
+implicit none
+
+!!!user defined variables
+integer, parameter :: startYr=2019, stopYr=2019
+integer, parameter :: startMon=8, stopMon=12
+
+!.....GPCP v2.3 
+!.....(2.5-degree, monthly, units of mm/day)
+character*180, parameter :: &
+    gpcpfile='/projects/0/ctdas/sib4_input/meteo/gpcp/gpcp_0.625dx0.5d_tot.nc'
+
+!....MERRA-2
+character*100, parameter :: &
+    merradir='/scratch/shared/nsmith/merra_proc/'
+character*20, parameter :: &
+    merraprefix='merra_'
+
+!!!other MERRA parameters 
+!!!assuming 2/3-degree lon by 1/2-degree lat, hourly data
+real*4, parameter :: timeconvert=3600.
+
+!space variables
+integer nlon, nlat
+real, dimension(:), allocatable :: lon, lat
+
+!time variables
+character*3 :: monname(12)
+character*100 :: monlabel
+
+!merra variables
+integer nlonm, nlatm, ntimem
+integer :: merrauaf, merraba
+
+real, dimension(:,:,:), allocatable :: lsprin, cuprin
+real, dimension(:,:,:), allocatable :: lsprout, cuprout
+real, dimension(:,:), allocatable :: merraprecipin, merraprecipout
+real, dimension(:,:), allocatable :: ratio
+
+!gpcp variables
+integer :: ntimeg, gpcpref
+real :: myyrstart, myyrnext
+real, dimension(:), allocatable :: timeg
+real, dimension(:,:,:), allocatable :: gpcpin
+real, dimension(:,:), allocatable :: gpcpprecip
+
+!areal variables
+real :: deltalon, deltalat
+real, dimension(:), allocatable :: lonE, lonW, arlon
+real, dimension(:), allocatable :: latN, latS, arlat
+
+!comparison variables
+integer :: ratioa1, ratiob1, ratio1
+real*8 :: preciptotg, preciptotmin, preciptotmout
+
+!netcdf variables
+integer ncid,dimid,varid,status
+integer nlondid, nlatdid, ntimedid
+integer lsprid, cuprid
+character*20 :: dimname
+character*120 :: merraname
+
+!misc variables
+integer :: i,j, yr, mon
+integer :: mystartmon, mystopmon
+
+!local variables
+real :: radius
+real*8 :: pi
+
+!Define/set variables
+data monname/'Jan','Feb','Mar','Apr','May','Jun', &
+    'Jul','Aug','Sep','Oct','Nov','Dec'/
+pi = acos(-1.0)
+radius = 6371000.
+
+!Get the GPCP data
+print*,''
+print('(a)'),'GPCP File Information: '
+print('(a,a)'), '   ',trim(gpcpfile)
+status = nf90_open( trim(gpcpfile), nf90_nowrite, ncid )
+IF (status .ne. nf90_noerr) THEN
+   print*,'Error Finding GPCP File. Stopping.'
+   STOP
+ENDIF
+
+status = nf90_inq_dimid(ncid, 'lon', dimid )
+status = nf90_inquire_dimension(ncid, dimid, dimname, nlon)
+status = nf90_inq_dimid(ncid, 'lat', dimid )
+status = nf90_inquire_dimension(ncid, dimid, dimname, nlat)
+status = nf90_inq_dimid(ncid, 'time', dimid )
+status = nf90_inquire_dimension(ncid, dimid, dimname, ntimeg)
+
+allocate(lon(nlon),lat(nlat),timeg(ntimeg))
+status = nf90_inq_varid(ncid, 'lon', varid )
+status = nf90_get_var(ncid, varid, lon )
+
+status = nf90_inq_varid(ncid, 'lat', varid )
+status = nf90_get_var(ncid, varid, lat )
+
+status = nf90_inq_varid(ncid, 'time', varid )
+status = nf90_get_var(ncid, varid, timeg)
+
+allocate(gpcpin(nlon,nlat,ntimeg))
+allocate(gpcpprecip(nlon,nlat))
+status = nf90_inq_varid(ncid, 'precip', varid )
+status = nf90_get_var(ncid, varid, gpcpin )
+status = nf90_close(ncid)
+
+!....get GPCP time reference start
+IF (startyr .LT. floor(timeg(1))) THEN
+    print*,'Requesting GPCP Data Prior To Available.'
+    print*,'Stopping.'
+ELSEIF (startyr .GT. ceiling(timeg(ntimeg))) THEN
+    print*,'Requesting GPCP Data After Available.'
+    print*,'Stopping.'
+ELSE
+   myyrstart = startyr + real(startMon-0.5)/12.
+   gpcpref = -999
+   DO i=1,ntimeg
+      myyrnext = timeg(i) + 0.5/12.
+      IF ((myyrstart .GE. timeg(i)) .AND. &
+          (myyrstart .LT. myyrnext)) THEN
+          gpcpref = i
+      ENDIF
+   ENDDO
+   IF (gpcpref .lt. 1) THEN
+      print*,'Invalid GPCP Time Requested.'
+      print*,'Stopping.'
+   ENDIF
+ENDIF
+print('(a,i6,f10.2)'),'   GPCP Start Ref and Time: ', &
+    gpcpref, timeg(gpcpref)
+
+
+!...get areal variables for precipitation totals
+deltalon=(lon(3)-lon(2))/2.
+deltalat=(lat(3)-lat(2))/2.
+
+allocate(lonE(nlon),lonW(nlon),arlon(nlon))
+do i=1,nlon
+   lonE(i)=lon(i)+deltalon
+   lonW(i)=lon(i)-deltalon
+   arlon(i)=(lonE(i)-lonW(i))/360.
+enddo
+arlon = arlon*2*pi*radius*radius/1.e15
+
+allocate(latS(nlat),latN(nlat),arlat(nlat))
+do j=1,nlat
+   if (j .eq. 1) then
+      latS(j) = -90.
+      latN(j) = (lat(j+1) + lat(j))*0.5
+   elseif (j .eq. 2) then
+      latS(j) = (lat(j-1) + lat(j))*0.5
+      latN(j) = lat(j) + deltalat
+   elseif (j .eq. nlat-1) then
+      latS(j) = lat(j) - deltalat
+      latN(j) = (lat(j) + lat(j+1))*0.5
+   elseif (j .eq. nlat) then
+      latS(j) = (lat(j-1) + lat(j))*0.5
+      latN(j) = 90.
+   else
+      latS(j) = lat(j) - deltalat
+      latN(j) = lat(j) + deltalat
+   endif
+   arlat(j) = -sin(pi*latS(j)/180.) + &
+               sin(pi*latN(j)/180.)
+enddo
+
+!Loop over years/months
+do yr=startYr,stopYr
+   mystartmon=1
+   mystopmon=12
+   IF (yr .eq. startyr) mystartmon=startMon
+   IF (yr .eq. stopyr) mystopmon=stopMon
+
+   do mon=mystartmon,mystopmon
+
+      !Get the GPCP data
+      IF ((gpcpref .GE. 1) .and. (gpcpref .LE. ntimeg)) THEN
+          gpcpprecip(:,:) = gpcpin(:,:,gpcpref)
+          gpcpref = gpcpref + 1
+      ELSE
+          print*,'Requested GPCP Data After Available.'
+          print*,'Stopping.'
+          STOP
+      ENDIF
+
+      !Open the MERRA file to modify
+      write(merraname,'(a,a,i4.4,i2.2,a)') &
+          trim(merradir), trim(merraprefix), yr, mon, '.nc'
+      call check ( nf90_open( trim(merraname), nf90_write, ncid ) )
+
+      call check ( nf90_inq_dimid(ncid, 'time', ntimedid ) )
+      call check ( nf90_inquire_dimension(ncid, ntimedid, dimname, ntimem) )
+
+      !check lon/lat info for MERRA only if first time through loop
+      if (mon .eq. startMon .and. yr .eq. startYr) then
+         call check ( nf90_inq_dimid(ncid, 'lon', nlondid ) )
+         call check ( nf90_inquire_dimension(ncid, nlondid, len=nlonm) )
+         call check ( nf90_inq_dimid(ncid, 'lat', nlatdid ) )
+         call check ( nf90_inquire_dimension(ncid, nlatdid, len=nlatm) )
+ 
+         IF ((nlonm .NE. nlon) .OR. (nlatm .NE. nlat)) THEN
+             print*,'Mismatching GPCP/MERRA Dimensions'
+             print*,' GPCP Lon/Lat: ',nlon,nlat
+             print*,' MERRA Lon/Lat: ',nlonm,nlatm
+             print*,'Stopping.'
+             STOP
+         ELSE
+             print('(a,2I6,2F10.4)'), &
+                '   Dimensions (nlon/nlat/dlon/dlat): ', &  
+                nlonm,nlatm,(lon(3)-lon(2)),lat(3)-lat(2)
+         ENDIF
+
+         allocate(merraprecipin(nlonm,nlatm))
+         allocate(merraprecipout(nlonm,nlatm))
+         allocate(ratio(nlonm,nlatm))
+      ENDIF !yr==startyr, mon==startmon
+
+      print*,''
+      write(monlabel,'(a,a,a,i4.4)') 'Processing ',monname(mon), ' ', yr
+      print('(a)'),trim(monlabel)
+      print('(a)'),'  Modifying MERRA File: '
+      print('(a,a)'),'   ',trim(merraname)
+
+      allocate(lsprin(nlonm,nlatm,ntimem),cuprin(nlonm,nlatm,ntimem))
+      allocate(lsprout(nlonm,nlatm,ntimem),cuprout(nlonm,nlatm,ntimem))
+       call check ( nf90_inq_varid(ncid, 'lspr', varid ) )
+      call check ( nf90_get_var(ncid, varid, lsprin ) )
+      call check ( nf90_inq_varid(ncid, 'cupr', varid ) )
+      call check ( nf90_get_var(ncid, varid, cuprin ) )
+      lsprout=lsprin
+      cuprout=cuprin
+
+      !Compare the precipitation
+      ratioa1 = 0
+      ratiob1 = 0
+      ratio1 = 0
+      DO i=1,nlon
+         DO j=1,nlat
+            merraprecipin(i,j) = (sum(cuprin(i,j,:)) + sum(lsprin(i,j,:))) &
+                                      *timeconvert
+            IF (merraprecipin(i,j) .GT. 0.) THEN
+               ratio(i,j) = gpcpprecip(i,j) / merraprecipin(i,j) 
+            ELSE
+               ratio(i,j) = 0.
+            ENDIF
+
+            IF (ratio(i,j) .GT. 1.001) THEN
+                ratioa1 = ratioa1 + 1
+            ELSEIF (ratio(i,j) .LT. 0.999) THEN
+                ratiob1 = ratiob1 + 1
+            ELSE
+                ratio1 = ratio1 + 1
+            ENDIF
+
+            cuprout(i,j,:) = cuprout(i,j,:)*ratio(i,j)
+            lsprout(i,j,:) = lsprout(i,j,:)*ratio(i,j)
+            merraprecipout(i,j) = (sum(cuprout(i,j,:)) + sum(lsprout(i,j,:))) &
+                                     *timeconvert
+         ENDDO !j
+      ENDDO !i 
+
+      !Check total precipitations
+      preciptotmin=0.0
+      preciptotmout=0.0
+      preciptotg=0.0
+      DO i=1,nlon
+         DO j=1,nlat
+            preciptotmin = preciptotmin + &
+                    merraprecipin(i,j)*arlon(i)*arlat(j)
+            preciptotmout = preciptotmout + &
+                    merraprecipout(i,j)*arlon(i)*arlat(j)
+            preciptotg = preciptotg + &
+                    gpcpprecip(i,j)*arlon(i)*arlat(j)
+         ENDDO
+      ENDDO
+
+      !Print out stats
+      print*,''
+      print('(a)'),' Monthly Precipitation Totals (kg)'
+      print('(a,E14.5)'),'  MERRA Original: ',preciptotmin
+      print('(a,E14.5)'),'  MERRA Scaled: ',preciptotmout
+      print('(a,E14.5)'),'  GPCP: ',preciptotg
+   
+      print*,''
+      print('(a)'),' Ratio Information: '
+      print('(a,2E14.5)'),'  Ratio Min/Max: ',minval(ratio), maxval(ratio)
+      print('(a,I8)'), '    # > 1.0: ', ratioa1
+      print('(a,I8)'), '    # < 1.0: ', ratiob1
+      print('(a,I8)'), '    # = 1.0: ', ratio1
+      print('(a,I8)'), '      TOTAL: ', ratioa1+ratiob1+ratio1
+
+      !Write out the new scaled data
+      status = nf90_inq_varid(ncid, 'lspr_scaled', lsprid )
+      if (status .ne. 0) then
+         call check ( nf90_redef(ncid) )
+         call check ( nf90_def_var( ncid, 'lspr_scaled', nf90_float, &
+              (/nlondid,nlatdid,ntimedid/), lsprid ) )
+         call check ( nf90_put_att(ncid, lsprid, &
+              'long_name','Scaled Large Scale Precip'))
+         call check ( nf90_put_att(ncid, lsprid, &
+              'title', 'LSPR Scaled To GPCP v2.3'))
+         call check ( nf90_put_att(ncid, lsprid, &
+              'units', 'mm/s'))
+         call check ( nf90_enddef( ncid ) )
+      endif
+
+      status = nf90_inq_varid(ncid, 'cupr_scaled', cuprid )
+      if (status .ne. 0) then
+         call check ( nf90_redef(ncid) )
+         call check ( nf90_def_var( ncid, 'cupr_scaled', nf90_float, &
+             (/nlondid,nlatdid,ntimedid/), cuprid ) )
+         call check ( nf90_put_att( ncid, cuprid, &
+              'long_name','Scaled Convective Precip'))
+         call check ( nf90_put_att( ncid, cuprid, &
+              'title', 'CUPR Scaled to GPCP v2.3'))
+         call check ( nf90_put_att( ncid, cuprid, &
+              'units', 'mm/s'))
+         call check ( nf90_enddef( ncid ) )
+      endif
+
+      !!!Setting all precip to large-scale!!!
+      !lsprout = lsprout + cuprout
+      !cuprout = 0.
+
+      call check ( nf90_put_var( ncid, lsprid, lsprout) )
+      call check ( nf90_put_var( ncid, cuprid, cuprout) )
+      call check ( nf90_close(ncid) )
+
+      deallocate(lsprin,cuprin,lsprout,cuprout)
+
+   enddo !mon=startMon,stopMon
+enddo !yr=startYr,stopYr
+
+print*,''
+print*,'Finished Processing'
+print*,''
+
+end
+
+
+!**********************************************************
+!**********************************************************
+
+subroutine check(status)
+
+use netcdf
+use typeSizes
+
+implicit none
+
+integer, intent(in) :: status
+
+   if (status /= nf90_noerr) then
+      stop "Error with netcdf.  Stopping."
+   endif
+
+end subroutine check
diff --git a/preprocess/scale_merra_gpcp_auto b/preprocess/scale_merra_gpcp_auto
new file mode 100755
index 0000000000000000000000000000000000000000..8e67c6ebd7af9fd470faee5346d8cf217d04d001
Binary files /dev/null and b/preprocess/scale_merra_gpcp_auto differ
diff --git a/preprocess/scale_merra_gpcp_auto.f90 b/preprocess/scale_merra_gpcp_auto.f90
new file mode 100644
index 0000000000000000000000000000000000000000..6ec8bade6b312bfd1f95133d0ec2cd2bf96df742
--- /dev/null
+++ b/preprocess/scale_merra_gpcp_auto.f90
@@ -0,0 +1,388 @@
+!Program to change the precipitation values for the SiB driver files
+!and scale them to GPCP precipitation.
+!
+!Program finds the ratio between the MERRA and GPCP precipitation
+!and multiplies by this ratio to 'scale' the precip.
+!
+!MERRA precip units assumed to be mm/s, with hourly data
+!GPCP precip units assumed to be mm/month, with monthly data
+!  --Expects GPCP to be regridded to MERRA resolution!!
+!
+!Program will not change the timing nor 'create' precip in MERRA.
+! 
+!NOTE:  This will actually change the netcdf file!
+!
+!To compile, use:
+!>pgf90 scale_merra_gpcp.f90 -L/usr/local/netcdf3-pgi/lib -lnetcdf -I/usr/local/netcdf3-pgi/include -o scale_merra_gpcp
+!
+!-or- (if defined)
+!>f90nc scale_merra_gpcp.f90
+!>f90nco scale_merra_gpcp.f90 scale_merra_gpcp
+!
+!-or-
+!>make scale_merra_gpcp
+!
+!kdhaynes, 01/2018
+
+program scale_merra_gpcp
+
+use netcdf
+implicit none
+
+!!!user defined variables
+integer, parameter :: startYr=2018, stopYr=2018
+integer, parameter :: startMon=1, stopMon=1
+
+!.....GPCP v2.3 
+!.....(2.5-degree, monthly, units of mm/day)
+character*180, parameter :: &
+    gpcpfile='/projects/0/ctdas/sib4_input/meteo/gpcp/gpcp_0.625dx0.5d_tot.nc'
+
+!....MERRA-2
+character*100, parameter :: &
+    merradir='/projects/0/ctdas/awoude/NRT/input/'
+character*20, parameter :: &
+    merraprefix='merra_'
+
+!!!other MERRA parameters 
+!!!assuming 2/3-degree lon by 1/2-degree lat, hourly data
+real*4, parameter :: timeconvert=3600.
+
+!space variables
+integer nlon, nlat
+real, dimension(:), allocatable :: lon, lat
+
+!time variables
+character*3 :: monname(12)
+character*100 :: monlabel
+
+!merra variables
+integer nlonm, nlatm, ntimem
+integer :: merrauaf, merraba
+
+real, dimension(:,:,:), allocatable :: lsprin, cuprin
+real, dimension(:,:,:), allocatable :: lsprout, cuprout
+real, dimension(:,:), allocatable :: merraprecipin, merraprecipout
+real, dimension(:,:), allocatable :: ratio
+
+!gpcp variables
+integer :: ntimeg, gpcpref
+real :: myyrstart, myyrnext
+real, dimension(:), allocatable :: timeg
+real, dimension(:,:,:), allocatable :: gpcpin
+real, dimension(:,:), allocatable :: gpcpprecip
+
+!areal variables
+real :: deltalon, deltalat
+real, dimension(:), allocatable :: lonE, lonW, arlon
+real, dimension(:), allocatable :: latN, latS, arlat
+
+!comparison variables
+integer :: ratioa1, ratiob1, ratio1
+real*8 :: preciptotg, preciptotmin, preciptotmout
+
+!netcdf variables
+integer ncid,dimid,varid,status
+integer nlondid, nlatdid, ntimedid
+integer lsprid, cuprid
+character*20 :: dimname
+character*120 :: merraname
+
+!misc variables
+integer :: i,j, yr, mon
+integer :: mystartmon, mystopmon
+
+!local variables
+real :: radius
+real*8 :: pi
+
+!Define/set variables
+data monname/'Jan','Feb','Mar','Apr','May','Jun', &
+    'Jul','Aug','Sep','Oct','Nov','Dec'/
+pi = acos(-1.0)
+radius = 6371000.
+
+!Get the GPCP data
+print*,''
+print('(a)'),'GPCP File Information: '
+print('(a,a)'), '   ',trim(gpcpfile)
+status = nf90_open( trim(gpcpfile), nf90_nowrite, ncid )
+IF (status .ne. nf90_noerr) THEN
+   print*,'Error Finding GPCP File. Stopping.'
+   STOP
+ENDIF
+
+status = nf90_inq_dimid(ncid, 'lon', dimid )
+status = nf90_inquire_dimension(ncid, dimid, dimname, nlon)
+status = nf90_inq_dimid(ncid, 'lat', dimid )
+status = nf90_inquire_dimension(ncid, dimid, dimname, nlat)
+status = nf90_inq_dimid(ncid, 'time', dimid )
+status = nf90_inquire_dimension(ncid, dimid, dimname, ntimeg)
+
+allocate(lon(nlon),lat(nlat),timeg(ntimeg))
+status = nf90_inq_varid(ncid, 'lon', varid )
+status = nf90_get_var(ncid, varid, lon )
+
+status = nf90_inq_varid(ncid, 'lat', varid )
+status = nf90_get_var(ncid, varid, lat )
+
+status = nf90_inq_varid(ncid, 'time', varid )
+status = nf90_get_var(ncid, varid, timeg)
+
+allocate(gpcpin(nlon,nlat,ntimeg))
+allocate(gpcpprecip(nlon,nlat))
+status = nf90_inq_varid(ncid, 'precip', varid )
+status = nf90_get_var(ncid, varid, gpcpin )
+status = nf90_close(ncid)
+
+!....get GPCP time reference start
+IF (startyr .LT. floor(timeg(1))) THEN
+    print*,'Requesting GPCP Data Prior To Available.'
+    print*,'Stopping.'
+ELSEIF (startyr .GT. ceiling(timeg(ntimeg))) THEN
+    print*,'Requesting GPCP Data After Available.'
+    print*,'Stopping.'
+ELSE
+   myyrstart = startyr + real(startMon-0.5)/12.
+   gpcpref = -999
+   DO i=1,ntimeg
+      myyrnext = timeg(i) + 0.5/12.
+      IF ((myyrstart .GE. timeg(i)) .AND. &
+          (myyrstart .LT. myyrnext)) THEN
+          gpcpref = i
+      ENDIF
+   ENDDO
+   IF (gpcpref .lt. 1) THEN
+      print*,'Invalid GPCP Time Requested.'
+      print*,'Stopping.'
+   ENDIF
+ENDIF
+print('(a,i6,f10.2)'),'   GPCP Start Ref and Time: ', &
+    gpcpref, timeg(gpcpref)
+
+
+!...get areal variables for precipitation totals
+deltalon=(lon(3)-lon(2))/2.
+deltalat=(lat(3)-lat(2))/2.
+
+allocate(lonE(nlon),lonW(nlon),arlon(nlon))
+do i=1,nlon
+   lonE(i)=lon(i)+deltalon
+   lonW(i)=lon(i)-deltalon
+   arlon(i)=(lonE(i)-lonW(i))/360.
+enddo
+arlon = arlon*2*pi*radius*radius/1.e15
+
+allocate(latS(nlat),latN(nlat),arlat(nlat))
+do j=1,nlat
+   if (j .eq. 1) then
+      latS(j) = -90.
+      latN(j) = (lat(j+1) + lat(j))*0.5
+   elseif (j .eq. 2) then
+      latS(j) = (lat(j-1) + lat(j))*0.5
+      latN(j) = lat(j) + deltalat
+   elseif (j .eq. nlat-1) then
+      latS(j) = lat(j) - deltalat
+      latN(j) = (lat(j) + lat(j+1))*0.5
+   elseif (j .eq. nlat) then
+      latS(j) = (lat(j-1) + lat(j))*0.5
+      latN(j) = 90.
+   else
+      latS(j) = lat(j) - deltalat
+      latN(j) = lat(j) + deltalat
+   endif
+   arlat(j) = -sin(pi*latS(j)/180.) + &
+               sin(pi*latN(j)/180.)
+enddo
+
+!Loop over years/months
+do yr=startYr,stopYr
+   mystartmon=1
+   mystopmon=12
+   IF (yr .eq. startyr) mystartmon=startMon
+   IF (yr .eq. stopyr) mystopmon=stopMon
+
+   do mon=mystartmon,mystopmon
+
+      !Get the GPCP data
+      IF ((gpcpref .GE. 1) .and. (gpcpref .LE. ntimeg)) THEN
+          gpcpprecip(:,:) = gpcpin(:,:,gpcpref)
+          gpcpref = gpcpref + 1
+      ELSE
+          print*,'Requested GPCP Data After Available.'
+          print*,'Stopping.'
+          STOP
+      ENDIF
+
+      !Open the MERRA file to modify
+      write(merraname,'(a,a,i4.4,i2.2,a)') &
+          trim(merradir), trim(merraprefix), yr, mon, '.nc'
+      call check ( nf90_open( trim(merraname), nf90_write, ncid ) )
+
+      call check ( nf90_inq_dimid(ncid, 'time', ntimedid ) )
+      call check ( nf90_inquire_dimension(ncid, ntimedid, dimname, ntimem) )
+
+      !check lon/lat info for MERRA only if first time through loop
+      if (mon .eq. startMon .and. yr .eq. startYr) then
+         call check ( nf90_inq_dimid(ncid, 'lon', nlondid ) )
+         call check ( nf90_inquire_dimension(ncid, nlondid, len=nlonm) )
+         call check ( nf90_inq_dimid(ncid, 'lat', nlatdid ) )
+         call check ( nf90_inquire_dimension(ncid, nlatdid, len=nlatm) )
+ 
+         IF ((nlonm .NE. nlon) .OR. (nlatm .NE. nlat)) THEN
+             print*,'Mismatching GPCP/MERRA Dimensions'
+             print*,' GPCP Lon/Lat: ',nlon,nlat
+             print*,' MERRA Lon/Lat: ',nlonm,nlatm
+             print*,'Stopping.'
+             STOP
+         ELSE
+             print('(a,2I6,2F10.4)'), &
+                '   Dimensions (nlon/nlat/dlon/dlat): ', &  
+                nlonm,nlatm,(lon(3)-lon(2)),lat(3)-lat(2)
+         ENDIF
+
+         allocate(merraprecipin(nlonm,nlatm))
+         allocate(merraprecipout(nlonm,nlatm))
+         allocate(ratio(nlonm,nlatm))
+      ENDIF !yr==startyr, mon==startmon
+
+      print*,''
+      write(monlabel,'(a,a,a,i4.4)') 'Processing ',monname(mon), ' ', yr
+      print('(a)'),trim(monlabel)
+      print('(a)'),'  Modifying MERRA File: '
+      print('(a,a)'),'   ',trim(merraname)
+
+      allocate(lsprin(nlonm,nlatm,ntimem),cuprin(nlonm,nlatm,ntimem))
+      allocate(lsprout(nlonm,nlatm,ntimem),cuprout(nlonm,nlatm,ntimem))
+       call check ( nf90_inq_varid(ncid, 'lspr', varid ) )
+      call check ( nf90_get_var(ncid, varid, lsprin ) )
+      call check ( nf90_inq_varid(ncid, 'cupr', varid ) )
+      call check ( nf90_get_var(ncid, varid, cuprin ) )
+      lsprout=lsprin
+      cuprout=cuprin
+
+      !Compare the precipitation
+      ratioa1 = 0
+      ratiob1 = 0
+      ratio1 = 0
+      DO i=1,nlon
+         DO j=1,nlat
+            merraprecipin(i,j) = (sum(cuprin(i,j,:)) + sum(lsprin(i,j,:))) &
+                                      *timeconvert
+            IF (merraprecipin(i,j) .GT. 0.) THEN
+               ratio(i,j) = gpcpprecip(i,j) / merraprecipin(i,j) 
+            ELSE
+               ratio(i,j) = 0.
+            ENDIF
+
+            IF (ratio(i,j) .GT. 1.001) THEN
+                ratioa1 = ratioa1 + 1
+            ELSEIF (ratio(i,j) .LT. 0.999) THEN
+                ratiob1 = ratiob1 + 1
+            ELSE
+                ratio1 = ratio1 + 1
+            ENDIF
+
+            cuprout(i,j,:) = cuprout(i,j,:)*ratio(i,j)
+            lsprout(i,j,:) = lsprout(i,j,:)*ratio(i,j)
+            merraprecipout(i,j) = (sum(cuprout(i,j,:)) + sum(lsprout(i,j,:))) &
+                                     *timeconvert
+         ENDDO !j
+      ENDDO !i 
+
+      !Check total precipitations
+      preciptotmin=0.0
+      preciptotmout=0.0
+      preciptotg=0.0
+      DO i=1,nlon
+         DO j=1,nlat
+            preciptotmin = preciptotmin + &
+                    merraprecipin(i,j)*arlon(i)*arlat(j)
+            preciptotmout = preciptotmout + &
+                    merraprecipout(i,j)*arlon(i)*arlat(j)
+            preciptotg = preciptotg + &
+                    gpcpprecip(i,j)*arlon(i)*arlat(j)
+         ENDDO
+      ENDDO
+
+      !Print out stats
+      print*,''
+      print('(a)'),' Monthly Precipitation Totals (kg)'
+      print('(a,E14.5)'),'  MERRA Original: ',preciptotmin
+      print('(a,E14.5)'),'  MERRA Scaled: ',preciptotmout
+      print('(a,E14.5)'),'  GPCP: ',preciptotg
+   
+      print*,''
+      print('(a)'),' Ratio Information: '
+      print('(a,2E14.5)'),'  Ratio Min/Max: ',minval(ratio), maxval(ratio)
+      print('(a,I8)'), '    # > 1.0: ', ratioa1
+      print('(a,I8)'), '    # < 1.0: ', ratiob1
+      print('(a,I8)'), '    # = 1.0: ', ratio1
+      print('(a,I8)'), '      TOTAL: ', ratioa1+ratiob1+ratio1
+
+      !Write out the new scaled data
+      status = nf90_inq_varid(ncid, 'lspr_scaled', lsprid )
+      if (status .ne. 0) then
+         call check ( nf90_redef(ncid) )
+         call check ( nf90_def_var( ncid, 'lspr_scaled', nf90_float, &
+              (/nlondid,nlatdid,ntimedid/), lsprid ) )
+         call check ( nf90_put_att(ncid, lsprid, &
+              'long_name','Scaled Large Scale Precip'))
+         call check ( nf90_put_att(ncid, lsprid, &
+              'title', 'LSPR Scaled To GPCP v2.3'))
+         call check ( nf90_put_att(ncid, lsprid, &
+              'units', 'mm/s'))
+         call check ( nf90_enddef( ncid ) )
+      endif
+
+      status = nf90_inq_varid(ncid, 'cupr_scaled', cuprid )
+      if (status .ne. 0) then
+         call check ( nf90_redef(ncid) )
+         call check ( nf90_def_var( ncid, 'cupr_scaled', nf90_float, &
+             (/nlondid,nlatdid,ntimedid/), cuprid ) )
+         call check ( nf90_put_att( ncid, cuprid, &
+              'long_name','Scaled Convective Precip'))
+         call check ( nf90_put_att( ncid, cuprid, &
+              'title', 'CUPR Scaled to GPCP v2.3'))
+         call check ( nf90_put_att( ncid, cuprid, &
+              'units', 'mm/s'))
+         call check ( nf90_enddef( ncid ) )
+      endif
+
+      !!!Setting all precip to large-scale!!!
+      !lsprout = lsprout + cuprout
+      !cuprout = 0.
+
+      call check ( nf90_put_var( ncid, lsprid, lsprout) )
+      call check ( nf90_put_var( ncid, cuprid, cuprout) )
+      call check ( nf90_close(ncid) )
+
+      deallocate(lsprin,cuprin,lsprout,cuprout)
+
+   enddo !mon=startMon,stopMon
+enddo !yr=startYr,stopYr
+
+print*,''
+print*,'Finished Processing'
+print*,''
+
+end
+
+
+!**********************************************************
+!**********************************************************
+
+subroutine check(status)
+
+use netcdf
+use typeSizes
+
+implicit none
+
+integer, intent(in) :: status
+
+   if (status /= nf90_noerr) then
+      stop "Error with netcdf.  Stopping."
+   endif
+
+end subroutine check
diff --git a/preprocess/scale_merra_gpcp_auto.o b/preprocess/scale_merra_gpcp_auto.o
new file mode 100644
index 0000000000000000000000000000000000000000..12129859306659a5c2c2bb33d8f6bed52f7e27c8
Binary files /dev/null and b/preprocess/scale_merra_gpcp_auto.o differ
diff --git a/preprocess/sib4_prior.sh b/preprocess/sib4_prior.sh
new file mode 100644
index 0000000000000000000000000000000000000000..5dbb77e748553dee97bef14e9c7066d83e41f3cc
--- /dev/null
+++ b/preprocess/sib4_prior.sh
@@ -0,0 +1,40 @@
+#!/bin/bash
+
+YEAR_START=2018
+YEAR_STOP=2018
+MONTH_START=1
+MONTH_STOP=1
+
+ORIG_DIR="/scratch/shared/awoude//MERRA/"
+PROC_DIR="/projects/0/ctdas/awoude/NRT/input/"
+
+#bash getmerra_auto $YEAR_START $MONTH_START $MONTH_END $ORIG_DIR
+
+sed -i "s/startYr=[^,]*/startYr=$YEAR_START/g" merra_pullvar_auto.f90
+sed -i "s/stopYr=[^,]*/stopYr=$YEAR_STOP/g" merra_pullvar_auto.f90
+sed -i "s/startMon=[^,]*/startMon=$MONTH_START/g" merra_pullvar_auto.f90
+sed -i "s/stopMon=[^,]*/stopMon=$MONTH_STOP/g" merra_pullvar_auto.f90
+sed -i "s|filedir=[^,]*|filedir=\'$ORIG_DIR\'|g" merra_pullvar_auto.f90
+sed -i "s|outdir=[^,]*|outdir=\'$PROC_DIR\'|g" merra_pullvar_auto.f90
+#
+make merra_pullvar_auto
+./merra_pullvar_auto
+#
+sed -i "s|merradir=[^,]*|merradir=\'$PROC_DIR\'|g" scale_merra_gpcp_auto.f90 
+sed -i "s/startYr=[^,]*/startYr=$YEAR_START/g" scale_merra_gpcp_auto.f90
+sed -i "s/stopYr=[^,]*/stopYr=$YEAR_STOP/g" scale_merra_gpcp_auto.f90
+sed -i "s/startMon=[^,]*/startMon=$MONTH_START/g" scale_merra_gpcp_auto.f90
+sed -i "s/stopMon=[^,]*/stopMon=$MONTH_STOP/g" scale_merra_gpcp_auto.f90
+#
+make scale_merra_gpcp_auto
+./scale_merra_gpcp_auto
+#
+sed -i "s|inputdir=[^,]*|inputdir=\'$PROC_DIR\'|g" merra_pullsib_auto.f90 
+sed -i "s|outputdir=[^,]*|outputdir=\'$PROC_DIR\'|g" merra_pullsib_auto.f90 
+sed -i "s/startYr=[^,]*/startYr=$YEAR_START/g" merra_pullsib_auto.f90
+sed -i "s/stopYr=[^,]*/stopYr=$YEAR_STOP/g" merra_pullsib_auto.f90
+sed -i "s/startmon=[^,]*/startmon=$MONTH_START/g" merra_pullsib_auto.f90
+sed -i "s/stopmon=[^,]*/stopmon=$MONTH_STOP/g" merra_pullsib_auto.f90
+#
+make merra_pullsib_auto
+./merra_pullsib_auto
diff --git a/privatemodules/.DS_Store b/privatemodules/.DS_Store
new file mode 100644
index 0000000000000000000000000000000000000000..6dae352bdb88d8014d9d49df9a19c7bdce6975e1
Binary files /dev/null and b/privatemodules/.DS_Store differ
diff --git a/privatemodules/.bashrc b/privatemodules/.bashrc
new file mode 100644
index 0000000000000000000000000000000000000000..3bc80bb08f839582027c5b4c3ebbc8b4b784cd7d
--- /dev/null
+++ b/privatemodules/.bashrc
@@ -0,0 +1,180 @@
+# .bashrc
+
+# Source global definitions
+if [ -f /etc/bashrc ]; then
+	. /etc/bashrc
+fi
+
+module load pre2019
+module load python/2.7.9
+#module load fortran/intel lapack/netlib/intel blas/netlib/intel
+
+#module load hdf5/serial/intel/1.8.10-patch1
+#module load netcdf
+
+#module load hdf4/intel/4.2.9
+#module load hdf5/impi/intel/1.8.9
+#module load netcdf/impi/intel/4.1.3
+#module load szip/intel/2.1
+
+#module load mkl
+module load nco
+module load cdo
+
+# SiBCASA
+#module load fortran/intel lapack/netlib/intel blas/netlib/intel
+#module load hdf4/intel/4.2.9
+#module load hdf5/serial/intel/1.8.10-patch1
+#module load netcdf/serial/intel
+
+# SiB4
+module load atlas
+module load gcc/5.2.0
+export LD_LIBRARY_PATH=/home/kooij032/privatemodules/nc4/lib/
+
+# TM5 
+#module load use.own
+#export UDUNITS_PATH=/home/ivdvelde/local/udunits/etc/udunits.dat
+#export PATH=$PATH:/home/ivdvelde/local:/usr/bin
+#export SVN_EDITOR=vim
+
+# Load aliases
+alias sq="squeue -u kooij032"
+alias ncdump='/home/kooij032/privatemodules/nc4/bin/ncdump'
+
+
+# User specific aliases and functions
+# Step 3.
+
+# ~/.bashrc: executed by bash(1) for non-login shells.
+# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
+# for examples
+
+# If not running interactively, don't do anything
+[ -z "$PS1" ] && return
+
+# don't put duplicate lines in the history. See bash(1) for more options
+# ... or force ignoredups and ignorespace
+HISTCONTROL=ignoredups:ignorespace
+
+# append to the history file, don't overwrite it
+shopt -s histappend
+
+# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
+HISTSIZE=1000
+HISTFILESIZE=2000
+
+# check the window size after each command and, if necessary,
+# update the values of LINES and COLUMNS.
+shopt -s checkwinsize
+
+# make less more friendly for non-text input files, see lesspipe(1)
+[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"
+
+# set variable identifying the chroot you work in (used in the prompt below)
+if [ -z "$debian_chroot" ] && [ -r /etc/debian_chroot ]; then
+    debian_chroot=$(cat /etc/debian_chroot)
+fi
+
+# load Solarized palette automaticly
+if [ -x /usr/bin/dircolors ]; then
+    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
+fi
+
+# set a fancy prompt (non-color, unless we know we "want" color)
+case "$TERM" in
+    xterm-color) color_prompt=yes;;
+esac
+
+# uncomment for a colored prompt, if the terminal has the capability; turned
+# off by default to not distract the user: the focus in a terminal window
+# should be on the output of commands, not on the prompt
+#force_color_prompt=yes
+
+if [ -n "$force_color_prompt" ]; then
+    if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
+	# We have color support; assume it's compliant with Ecma-48
+	# (ISO/IEC-6429). (Lack of such support is extremely rare, and such
+	# a case would tend to support setf rather than setaf.)
+	color_prompt=yes
+    else
+	color_prompt=
+    fi
+fi
+
+if [ "$color_prompt" = yes ]; then
+    PS1='${debian_chroot:+($debian_chroot)}\u\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
+else
+    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\W\$ '
+fi
+unset color_prompt force_color_prompt
+
+# If this is an xterm set the title to user@host:dir
+case "$TERM" in
+xterm*|rxvt*)
+    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
+    ;;
+*)
+    ;;
+esac
+
+# enable color support of ls and also add handy aliases
+if [ -x /usr/bin/dircolors ]; then
+    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
+    alias ls='ls --color=auto'
+    #alias dir='dir --color=auto'
+    #alias vdir='vdir --color=auto'
+
+    alias grep='grep --color=auto'
+    alias fgrep='fgrep --color=auto'
+    alias egrep='egrep --color=auto'
+fi
+
+# some more ls aliases
+alias ll='ls -halF'
+alias la='ls -A'
+alias l='ls -CF'
+
+# Add an "alert" alias for long running commands.  Use like so:
+#   sleep 10; alert
+alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
+
+# Alias definitions.
+# You may want to put all your additions into a separate file like
+# ~/.bash_aliases, instead of adding them here directly.
+# See /usr/share/doc/bash-doc/examples in the bash-doc package.
+
+if [ -f ~/.bash_aliases ]; then
+    . ~/.bash_aliases
+fi
+
+# enable programmable completion features (you don't need to enable
+# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
+# sources /etc/bash.bashrc).
+if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
+    . /etc/bash_completion
+fi
+
+# Parse git for clean dir
+function parse_git_dirty {
+  [[ "$(git status 2> /dev/null | tail -n1)" != "nothing to commit (working directory clean)" ]] && echo "*"
+}
+
+# To display git branch
+function parse_git_branch {
+    git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e "s/* \(.*\)/[\1$(parse_git_dirty)]/"
+}
+
+if [[ ${EUID} == 0 ]] ; then
+    PS1='\[\033[01;31m\]\u@\h \[\033[01;34m\]\w\[\033[01;35m\]$(parse_git_branch)\[\033[01;34m\] \$ \[\033[00m\]'
+else
+    PS1='\[\033[01;00m\]\u:\w\[\033[00;33m\]$(parse_git_branch)\[\033[00m\] \$ '
+fi
+
+# Change the window title of X terminals
+PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/$HOME/~}\007"'
+
+# End of Git branch config
+
+export PATH=$PATH:~/privatemodules/nc4/bin
+
diff --git a/privatemodules/nc4/bin/gif2h5 b/privatemodules/nc4/bin/gif2h5
new file mode 100755
index 0000000000000000000000000000000000000000..d4212e21fbb9dae04e5970bd794351a54a221a55
Binary files /dev/null and b/privatemodules/nc4/bin/gif2h5 differ
diff --git a/privatemodules/nc4/bin/h52gif b/privatemodules/nc4/bin/h52gif
new file mode 100755
index 0000000000000000000000000000000000000000..0ac8947454c471ae45ae63d694ceaa6c3ea38b55
Binary files /dev/null and b/privatemodules/nc4/bin/h52gif differ
diff --git a/privatemodules/nc4/bin/h5cc b/privatemodules/nc4/bin/h5cc
new file mode 100755
index 0000000000000000000000000000000000000000..ec1b2a3dcf421ed6826b99d42ac8cefeaca1c037
--- /dev/null
+++ b/privatemodules/nc4/bin/h5cc
@@ -0,0 +1,401 @@
+#! /bin/sh
+##
+# Copyright by The HDF Group.
+# Copyright by the Board of Trustees of the University of Illinois.
+# All rights reserved.
+#
+# This file is part of HDF5.  The full HDF5 copyright notice, including
+# terms governing use, modification, and redistribution, is contained in
+# the files COPYING and Copyright.html.  COPYING can be found at the root
+# of the source code distribution tree; Copyright.html can be found at the
+# root level of an installed copy of the electronic HDF5 document set and
+# is linked from the top-level documents page.  It can also be found at
+# http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have
+# access to either file, you may request a copy from help@hdfgroup.org.
+##
+
+# This tool is adapted from the mpicc command of the MPICH Software.
+
+############################################################################
+##                                                                        ##
+## Things You May Have to Modify:                                         ##
+##                                                                        ##
+## If the following paths don't point to the place were HDF5 is installed ##
+## on your system (i.e., you received a binary distribution or moved the  ##
+## files from the originally installed directory to another directory)    ##
+## then modify them accordingly to represent the new paths.               ##
+##                                                                        ##
+############################################################################
+prefix="/home/erikvs/privatemodules/nc4"
+exec_prefix="${prefix}"
+libdir="${exec_prefix}/lib"
+includedir="${prefix}/include"
+HL="hl"
+
+############################################################################
+##                                                                        ##
+## Things You Can Modify to Override HDF5 Library Build Components:       ##
+##                                                                        ##
+## (Advanced usage - know what you're doing - you're on your own here.)   ##
+## The four variables below can be used to insert paths and flags in      ##
+## CPPFLAGS, CFLAGS, LDFLAGS, or LIBS in the h5cc compile line:           ##
+##    $CLINKER $H5BLD_CPPFLAGS $CPPFLAGS $H5BLD_CFLAGS $CFLAGS $LDFLAGS   ##
+##    $LIBS $clibpath $link_objs $link_args $shared_link                  ##
+##                                                                        ##
+## These settings can be overriden by setting HDF5_CFLAGS,                ##
+## HDF5_CPPFLAGS, HDF5_LDFLAGS, or HDF5_LIBS in the environment.          ##
+##                                                                        ##
+############################################################################
+CFLAGSBASE=""
+CPPFLAGSBASE=""
+LDFLAGSBASE=""
+LIBSBASE=""
+
+############################################################################
+##                                                                        ##
+## You shouldn't have to modify anything below this line.                 ##
+##                                                                        ##
+############################################################################
+
+# Constants definitions
+EXIT_SUCCESS=0
+EXIT_FAILURE=1
+
+host_os="linux-gnu"
+
+prog_name="`basename $0`"
+
+allargs=""
+compile_args=""
+libraries=""
+link_args=""
+link_objs=""
+clibpath=""
+
+do_link="yes"
+do_compile="no"
+dash_o="no"
+dash_c="no"
+get_output_file="no"
+
+SHOW="eval"
+CCBASE="gcc"
+CLINKERBASE="gcc"
+
+# CFLAGS, CPPFLAGS and LDFLAGS are reserved for use by the script user.
+# FLAGS brought from the hdf5 build are put in H5BLD_*FLAGS.
+
+# User's CPPFLAGS and CFLAGS come after their H5BLD counterparts.  User's 
+# LDFLAGS come just before clibpath, user's LIBS come after $link_objs and 
+# before the hdf5 libraries in $link_args, followed by any external library 
+# paths and libraries from AM_LDFLAGS, LDFLAGS, AM_LIBS or LIBS carried in 
+# from the hdf5 build. The order of the flags is intended to give precedence
+# to the user's flags.
+H5BLD_CFLAGS=" -fPIC"
+H5BLD_CPPFLAGS="-I/home/erikvs/privatemodules/nc4/include -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_BSD_SOURCE  "
+H5BLD_LDFLAGS=" -L/home/erikvs/privatemodules/nc4/lib "
+H5BLD_LIBS=" -lz -ldl -lm "
+
+CC="${HDF5_CC:-$CCBASE}"
+CLINKER="${HDF5_CLINKER:-$CLINKERBASE}"
+CFLAGS="${HDF5_CFLAGS:-$CFLAGSBASE}"
+CPPFLAGS="${HDF5_CPPFLAGS:-$CPPFLAGSBASE}"
+LDFLAGS="${HDF5_LDFLAGS:-$LDFLAGSBASE}"
+LIBS="${HDF5_LIBS:-$LIBSBASE}"
+
+# If a static library is available, the default will be to use it.  If the only
+# available library is shared, it will be used by default.  The user can 
+# override either default, although choosing an unavailable library will result
+# in link errors.  
+STATIC_AVAILABLE="yes"
+if test "${STATIC_AVAILABLE}" = "yes"; then
+  USE_SHARED_LIB="${HDF5_USE_SHLIB:-no}"
+else
+  USE_SHARED_LIB="${HDF5_USE_SHLIB:-yes}"
+fi
+
+
+usage() {
+  # A wonderfully informative "usage" message.
+  echo "usage: $prog_name [OPTIONS] <compile line>"
+  echo "  OPTIONS:"
+  echo "    -help        This help message."
+  echo "    -echo        Show all the shell commands executed"
+  echo "    -prefix=DIR  Prefix directory to find HDF5 lib/ and include/"
+  echo "                   subdirectories [default: $prefix]"
+  # A wonderfully informative "usage" message.
+  echo "usage: $prog_name [OPTIONS] <compile line>"
+  echo "  OPTIONS:"
+  echo "    -help        This help message."
+  echo "    -echo        Show all the shell commands executed"
+  echo "    -prefix=DIR  Prefix directory to find HDF5 lib/ and include/"
+  echo "                   subdirectories [default: $prefix]"
+  echo "    -show        Show the commands without executing them"
+  echo "    -showconfig  Show the HDF5 library configuration summary"
+  echo "    -shlib       Compile with shared HDF5 libraries [default for hdf5 built"
+  echo "                                                     without static libraries]"
+  echo "    -noshlib     Compile with static HDF5 libraries [default for hdf5 built"
+  echo "                                                     with static libraries]"
+  echo " "
+  echo "  <compile line>  - the normal compile line options for your compiler."
+  echo "                    $prog_name uses the same compiler you used to compile"
+  echo "                    HDF5. Check with your compiler's man pages for more"
+  echo "                    information on which options are needed."
+  echo " "
+  echo " You can override the compiler, linker, and whether or not to use static"
+  echo " or shared libraries to compile your program by setting the following"
+  echo " environment variables accordingly:"
+  echo " "
+  echo "   HDF5_CC                  -  use a different C compiler"
+  echo "   HDF5_CLINKER             -  use a different linker"
+  echo "   HDF5_USE_SHLIB=[yes|no]  -  use shared or static version of the HDF5 library"
+  echo "                                 [default: no except when built with only" 
+  echo "                                           shared libraries]"
+  echo " "
+  echo " You can also add or change paths and flags to the compile line using"
+  echo " the following environment varibles or by assigning them to their counterparts"
+  echo " in the 'Things You Can Modify to Override...'" section of $prog_name
+  echo " "
+  echo "  Variable              Current value to be replaced"
+  echo "  HDF5_CPPFLAGS         \"$CPPFLAGSBASE\""
+  echo "  HDF5_CFLAGS           \"$CFLAGSBASE\""
+  echo "  HDF5_LDFLAGS          \"$LDFLAGSBASE\""
+  echo "  HDF5_LIBS             \"$LIBSBASE\""
+  echo " "
+  echo " Note that adding library paths to HDF5_LDFLAGS where another hdf5 version"
+  echo " is located may link your program with that other hdf5 library version."
+  echo " "
+  exit $EXIT_FAILURE
+}
+
+# Show the configuration summary of the library recorded in the
+# libhdf5.settings file reside in the lib directory.
+showconfigure()
+{
+  cat ${libdir}/libhdf5.settings
+  status=$?
+}
+
+# Main
+status=$EXIT_SUCCESS
+
+if test "$#" = "0"; then
+  # No parameters specified, issue usage statement and exit.
+  usage
+fi
+
+case "$CC" in
+  gcc)
+    kind="gcc"
+    ;;
+  mpicc|mpcc|mpicc_r)
+    # Is this gcc masquarading as an MPI compiler?
+    if test "`${CC} -v 2>&1 | sed -n 2p | cut -c1-3`" = "gcc"; then
+      kind="gcc"
+    else
+      # Nope
+      kind="$host_os"
+    fi
+    ;;
+  *)
+    kind="$host_os"
+    ;;
+esac
+
+for arg in $@ ; do
+  if test "x$get_output_file" = "xyes"; then
+    link_args="$link_args $arg"
+    output_file="$arg"
+    get_output_file="no"
+    continue
+  fi
+
+  case "$arg" in
+    -c)
+      allargs="$allargs $arg"
+      compile_args="$compile_args $arg"
+
+      if test "x$do_link" = "xyes" -a -n "$output_file"; then
+        compile_args="$compile_args -o $outputfile"
+      fi
+
+      do_link="no"
+      dash_c="yes"
+      ;;
+    -o)
+      allargs="$allargs $arg"
+      dash_o="yes"
+
+      if test "x$dash_c" = "xyes"; then
+        compile_args="$compile_args $arg"
+      else
+        link_args="$link_args $arg"
+        do_link="yes"
+        get_output_file="yes"
+      fi
+      ;;
+    -E|-M|-MT)
+      allargs="$allargs $arg"
+      compile_args="$compile_args $arg"
+      dash_c="yes"
+      do_link="no"
+      ;;
+    -l*)
+      libraries=" $libraries $arg "
+      allargs="$allargs $arg"
+      ;;
+    -prefix=*)
+      prefix="`expr "$arg" : '-prefix=\(.*\)'`"
+      ;;
+    -echo)
+      set -x
+      ;;
+    -show)
+      SHOW="echo"
+      ;;
+    -showconfig)
+      showconfigure
+      exit $status
+      ;;
+    -shlib)
+      USE_SHARED_LIB="yes"
+      ;;
+    -noshlib)
+      USE_SHARED_LIB="no"
+      ;;
+    -help)
+      usage
+      ;;
+    *\"*)
+      qarg="'"$arg"'"
+      allargs="$allargs $qarg"
+      ;;
+    *\'*)
+      qarg='\"'"$arg"'\"'
+      allargs="$allargs $qarg"
+      ;;
+    *)
+      allargs="$allargs $qarg"
+
+      if test -s "$arg"; then
+        ext=`expr "$arg" : '.*\(\..*\)'`
+
+        if test "x$ext" = "x.c"; then
+          do_compile="yes"
+          compile_args="$compile_args $arg"
+          fname=`basename $arg .c`
+          link_objs="$link_objs $fname.o"
+        elif test "x$ext" = "x.o"; then
+          if test "x$dash_c" = "xyes"; then
+            compile_args="$compile_args $arg"
+          else
+            do_link="yes"
+            link_objs="$link_objs $arg"
+          fi
+        elif test "x$ext" = "x.a"; then
+          # This is an archive that we're linking in
+          libraries=" $libraries $arg "
+        else
+          compile_args="$compile_args $arg"
+          link_args="$link_args $arg"
+        fi
+      else
+        compile_args="$compile_args $arg"
+        link_args="$link_args $arg"
+      fi
+      ;;
+  esac
+done
+
+if test "$dash_c" = "yes" -a "$do_compile" = no -a "$do_link" = no ; then
+    # -c was specified.  Force do_compile on.
+    do_compile=yes
+fi
+
+if test "x$do_compile" = "xyes"; then
+  if test "x$dash_c" != "xyes"; then
+    compile_args="-c $compile_args"
+  fi
+
+  $SHOW $CC -I$includedir $H5BLD_CPPFLAGS $CPPFLAGS $H5BLD_CFLAGS $CFLAGS $compile_args
+  status=$?
+
+  if test "$status" != "0"; then
+    exit $status
+  fi
+fi
+
+if test "x$do_link" = "xyes"; then
+  shared_link=""
+# conditionnaly link with the hl library  
+  if test "X$HL" = "Xhl"; then
+   libraries=" $libraries -lhdf5_hl -lhdf5 "
+  else
+   libraries=" $libraries  -lhdf5 "
+  fi
+  link_args="$link_args -L${libdir}"
+
+  case "$kind" in
+    gcc|linux*)
+      # MacOS X doesn't support the "-Wl,-rpath -Wl," style of linker flags.
+      # It appears to want none of them specified.
+      case "$host_os" in
+        darwin*)          flag="" ;;
+        *)                flag="-Wl,-rpath -Wl," ;;
+      esac
+      ;;
+    hpux*)                flag="-Wl,+b -Wl," ;;
+    freebsd*|solaris*)    flag="-R" ;;
+    rs6000*|aix*)         flag="-L" ;;
+    irix*|sgi)            flag="-rpath " ;;
+    *)                    flag="" ;;
+  esac
+
+  if test -n "$flag"; then
+    shared_link="${flag}${libdir}"
+  fi
+
+  if test "x$USE_SHARED_LIB" != "xyes"; then
+    # The "-lhdf5" & "-lhdf5_hl" flags are in here already...This is a static
+    # compile though, so change it to the static version (.a) of the library.
+    new_libraries=""
+    for lib in $libraries; do
+      case "$lib" in
+        -lhdf5)
+          new_libraries="$new_libraries ${libdir}/libhdf5.a"
+          ;;
+        -lhdf5_hl)
+          new_libraries="$new_libraries ${libdir}/libhdf5_hl.a"
+          ;;
+        *)
+          new_libraries="$new_libraries $lib"
+          ;;
+      esac
+    done
+    libraries="$new_libraries"
+  fi
+
+  for lib in $libraries; do
+    if echo $link_args | grep " $lib " > /dev/null ||
+       echo $link_args | grep " $lib$" > /dev/null; then
+      :
+    else
+      link_args="$link_args $lib "
+    fi
+  done
+
+  # The LIBS are just a bunch of -l* libraries necessary for the HDF5
+  # module. It's okay if they're included twice in the compile line.
+  link_args="$link_args $H5BLD_LDFLAGS $H5BLD_LIBS"
+
+  # User's CPPFLAGS and CFLAGS come after their H5BLD counterparts.  User's 
+  # LDFLAGS come just before clibpath, user's LIBS come after $link_objs and 
+  # before the hdf5 libraries in $link_args, followed by any external library 
+  # paths and libraries from AM_LDFLAGS, LDFLAGS, AM_LIBS or LIBS carried in 
+  # from the hdf5 build. The order of the flags is intended to give precedence
+  # to the user's flags.
+  $SHOW $CLINKER $H5BLD_CPPFLAGS $CPPFLAGS $H5BLD_CFLAGS $CFLAGS $LDFLAGS $clibpath $link_objs $LIBS $link_args $shared_link
+  status=$?
+fi
+
+exit $status
diff --git a/privatemodules/nc4/bin/h5copy b/privatemodules/nc4/bin/h5copy
new file mode 100755
index 0000000000000000000000000000000000000000..e22eba5a1d9ee352c13ddcc531a39d4e60835125
Binary files /dev/null and b/privatemodules/nc4/bin/h5copy differ
diff --git a/privatemodules/nc4/bin/h5debug b/privatemodules/nc4/bin/h5debug
new file mode 100755
index 0000000000000000000000000000000000000000..8c0ac0075b766528d6bfe719df289a602c3a45b6
Binary files /dev/null and b/privatemodules/nc4/bin/h5debug differ
diff --git a/privatemodules/nc4/bin/h5diff b/privatemodules/nc4/bin/h5diff
new file mode 100755
index 0000000000000000000000000000000000000000..f90bcd31abdac14507101f25192ad48d0b4734f2
Binary files /dev/null and b/privatemodules/nc4/bin/h5diff differ
diff --git a/privatemodules/nc4/bin/h5dump b/privatemodules/nc4/bin/h5dump
new file mode 100755
index 0000000000000000000000000000000000000000..623e25e53b031eb0cff7e8a74cce486033eb3d1a
Binary files /dev/null and b/privatemodules/nc4/bin/h5dump differ
diff --git a/privatemodules/nc4/bin/h5import b/privatemodules/nc4/bin/h5import
new file mode 100755
index 0000000000000000000000000000000000000000..3925beeb8d196421ba96f7a9ef299fbc103cd662
Binary files /dev/null and b/privatemodules/nc4/bin/h5import differ
diff --git a/privatemodules/nc4/bin/h5jam b/privatemodules/nc4/bin/h5jam
new file mode 100755
index 0000000000000000000000000000000000000000..5ef81a55102784659880eb6616560b1b290f6b42
Binary files /dev/null and b/privatemodules/nc4/bin/h5jam differ
diff --git a/privatemodules/nc4/bin/h5ls b/privatemodules/nc4/bin/h5ls
new file mode 100755
index 0000000000000000000000000000000000000000..da3b5130c0c0d6ea5f5cbfe73edbc7be4fa379d4
Binary files /dev/null and b/privatemodules/nc4/bin/h5ls differ
diff --git a/privatemodules/nc4/bin/h5mkgrp b/privatemodules/nc4/bin/h5mkgrp
new file mode 100755
index 0000000000000000000000000000000000000000..3242e0107b7defae320678ff51e51ec629e3f9a4
Binary files /dev/null and b/privatemodules/nc4/bin/h5mkgrp differ
diff --git a/privatemodules/nc4/bin/h5perf_serial b/privatemodules/nc4/bin/h5perf_serial
new file mode 100755
index 0000000000000000000000000000000000000000..728d8596702e8847e334b8f6473bd68884fada34
Binary files /dev/null and b/privatemodules/nc4/bin/h5perf_serial differ
diff --git a/privatemodules/nc4/bin/h5redeploy b/privatemodules/nc4/bin/h5redeploy
new file mode 100755
index 0000000000000000000000000000000000000000..6b6ef87db477e3d3edae79284eb8b75379a53c7f
--- /dev/null
+++ b/privatemodules/nc4/bin/h5redeploy
@@ -0,0 +1,218 @@
+#! /bin/sh
+#
+# Copyright by The HDF Group.
+# Copyright by the Board of Trustees of the University of Illinois.
+# All rights reserved.
+#
+# This file is part of HDF5.  The full HDF5 copyright notice, including
+# terms governing use, modification, and redistribution, is contained in
+# the files COPYING and Copyright.html.  COPYING can be found at the root
+# of the source code distribution tree; Copyright.html can be found at the
+# root level of an installed copy of the electronic HDF5 document set and
+# is linked from the top-level documents page.  It can also be found at
+# http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have
+# access to either file, you may request a copy from help@hdfgroup.org.
+#
+
+## Update HDF5 compiler tools after the HDF5 software has been installed  ##
+## in a new location.							  ##
+## For help page, use "h5redeploy -help"				  ##
+##									  ##
+
+# Constants definitions
+EXIT_SUCCESS=0
+EXIT_FAILURE=1
+
+# Function definitions
+
+# show help page
+usage() {
+  # A wonderfully informative "usage" message.
+  echo "usage: $prog_name [OPTIONS]"
+  echo "  OPTIONS:"
+  echo "    -help|help        This help message"
+  echo "    -echo             Show all the shell commands executed"
+  echo "    -force            No prompt, just do it"
+  echo "    -prefix=DIR       New directory to find HDF5 lib/ and include/"
+  echo "                        subdirectories [default: current directory]"
+  echo "    -exec-prefix=DIR  New directory to find HDF5 lib/"
+  echo "                        subdirectory [default: <prefix>]"
+  echo "    -libdir=DIR       New directory for the HDF5 lib directory"
+  echo "                        [default: <exec-prefix>/lib]"
+  echo "    -includedir=DIR   New directory for the HDF5 header files"
+  echo "                        [default: <prefix>/include]"
+  echo "    -tool=TOOL        Tool to update. TOOL must be in the current"
+  echo "                        directory and writable. [default: $h5tools]"
+  echo "    -show             Show the commands without executing them"
+  echo " "
+  exit $EXIT_FAILURE
+}
+
+# display variable values
+dump_vars(){
+    echo "====Showing all variable values====="
+    echo prefix=$prefix
+    echo h5tools=$h5tools
+    echo "====End Showing====="
+}
+
+# show actions to be taken
+show_action()
+{
+    echo "Update the following tools because they are now installed at a new directory"
+    for t in $foundtools; do
+	echo "${t}:"
+	echo "   current setting=`sed -e '/^prefix=/s/prefix=//p' -e d $t`"
+	echo "   new     setting="\""$prefix"\"
+    done
+}
+
+
+# Report Error message
+ERROR()
+{
+    echo "***ERROR***"
+    echo "$1"
+}
+
+# Main
+#
+############################################################################
+## Installation directories:						  ##
+## prefix	architecture-independent files.				  ##
+## exec_prefix	architecture-dependent files, default is <prefix>.	  ##
+## libdir	libraries, default is <exec_prefix>/lib.		  ##
+## includedir	header files, default is <prefix/include>.		  ##
+## Not used here:							  ##
+## bindir	executables, <exec_prefix/bin>.				  ##
+############################################################################
+# Initialization
+h5tools="h5cc h5pcc h5fc h5pfc h5c++"	# possible hdf5 tools
+foundtools=		# tools found and will be modified
+fmode=			# force mode, default is off
+prefix=
+exec_prefix=
+libdir=
+includedir=
+
+# Parse options
+for arg in $@ ; do
+  case "$arg" in
+    -prefix=*)
+      prefix="`echo $arg | cut -f2 -d=`"
+      ;;
+    -exec-prefix=*)
+      exec_prefix="`echo $arg | cut -f2 -d=`"
+      ;;
+    -libdir=*)
+      libdir="`echo $arg | cut -f2 -d=`"
+      ;;
+    -includedir=*)
+      includedir="`echo $arg | cut -f2 -d=`"
+      ;;
+    -echo)
+      set -x
+      ;;
+    -show)
+      SHOW="echo"
+      ;;
+    -tool=*)
+      h5tools="`echo $arg | cut -f2 -d=`"
+      ;;
+    -help|help)
+      usage
+      ;;
+    -force)
+      fmode=yes
+      ;;
+    *)
+      ERROR "Unknown Option($arg)"
+      usage
+      exit $EXIT_FAILURE
+      ;;
+  esac
+done
+
+# Set to default value, one above where i am, if not given by user
+if [ -z "$prefix" ]; then
+    prefix=`(cd ..;pwd)`
+fi
+if [ -z "$exec_prefix" ]; then
+    exec_prefix='${prefix}'		# use single quotes to prevent expansion of $
+fi
+if [ -z "$libdir" ]; then
+    libdir='${exec_prefix}'/lib	# use single quotes to prevent expansion of $
+fi
+if [ -z "$includedir" ]; then
+    includedir='${prefix}'/include # use single quotes to prevent expansion of $
+fi
+
+for x in $h5tools; do
+    if [ -f $x ]; then
+	foundtools="$foundtools $x"
+	if [ ! -w $x ]; then
+	    ERROR "h5tool($x) is not writable"
+	    exit $EXIT_FAILURE
+	fi
+    fi
+done
+
+if [ -z "$foundtools" ]; then
+    ERROR "found no tools to modify"
+    exit $EXIT_FAILURE
+fi
+
+# Show actions to be taken and get consent
+show_action
+# Ask confirmation unless fmode is on
+if [ x-$fmode = x- ]; then
+    echo "Continue? (yes/no)"
+    read ansx
+    ans=`echo $ansx | tr "[A-Z]" "[a-z]"`
+    if [ x-$ans != x-yes ]; then
+	echo ABORT.  No tools changed.
+	exit $EXIT_FAILURE
+    fi
+fi
+
+
+# Create the update commands
+CMDFILE=/tmp/h5redeploy.$$
+touch $CMDFILE
+chmod 0600 $CMDFILE
+echo "/^prefix=/c"                    >> $CMDFILE
+echo prefix=\""$prefix"\"             >> $CMDFILE
+echo .                                >> $CMDFILE
+echo "/^exec_prefix=/c"               >> $CMDFILE
+echo exec_prefix=\""$exec_prefix"\"   >> $CMDFILE
+echo .                                >> $CMDFILE
+echo "/^libdir=/c"                    >> $CMDFILE
+echo libdir=\""$libdir"\"             >> $CMDFILE
+echo .                                >> $CMDFILE
+echo "/^includedir=/c"                >> $CMDFILE
+echo includedir=\""$includedir"\"     >> $CMDFILE
+echo .                                >> $CMDFILE
+(echo w; echo q)                      >> $CMDFILE
+
+
+# Update them
+if [ "$SHOW" = "echo" ]; then
+    echo "===Update commands are:===="
+    cat $CMDFILE
+    echo "===End Update commands====="
+fi
+
+for t in $foundtools; do
+    echo Update $t ...
+    COMMAND="ed - $t"
+    if [ "$SHOW" = "echo" ]; then
+	echo $COMMAND
+    else
+	$COMMAND < $CMDFILE
+    fi
+done
+
+
+# Cleanup
+rm -f $CMDFILE
+exit $EXIT_SUCCESS
diff --git a/privatemodules/nc4/bin/h5repack b/privatemodules/nc4/bin/h5repack
new file mode 100755
index 0000000000000000000000000000000000000000..c1d1947ad4c06ffc954c02091ef580f1d5c5de34
Binary files /dev/null and b/privatemodules/nc4/bin/h5repack differ
diff --git a/privatemodules/nc4/bin/h5repart b/privatemodules/nc4/bin/h5repart
new file mode 100755
index 0000000000000000000000000000000000000000..fefabdc4f31b89108a6c2a189f349a910f0922ca
Binary files /dev/null and b/privatemodules/nc4/bin/h5repart differ
diff --git a/privatemodules/nc4/bin/h5stat b/privatemodules/nc4/bin/h5stat
new file mode 100755
index 0000000000000000000000000000000000000000..b5a2baccb31f7357ebd1b98399795fe3d33f2fba
Binary files /dev/null and b/privatemodules/nc4/bin/h5stat differ
diff --git a/privatemodules/nc4/bin/h5unjam b/privatemodules/nc4/bin/h5unjam
new file mode 100755
index 0000000000000000000000000000000000000000..3662bb1f2d074ad79e721f3d49e1bf5e0805e0ec
Binary files /dev/null and b/privatemodules/nc4/bin/h5unjam differ
diff --git a/privatemodules/nc4/bin/nc-config b/privatemodules/nc4/bin/nc-config
new file mode 100755
index 0000000000000000000000000000000000000000..26511b48af4f06040c161a0b67904fd8c1274578
--- /dev/null
+++ b/privatemodules/nc4/bin/nc-config
@@ -0,0 +1,305 @@
+#! /bin/sh
+#
+# This forms the basis for the nc-config utility, which tells you
+# various things about the netCDF installation. This code was
+# contributed by netCDF user Arlindo DaSilva. Thanks Arlindo!
+
+prefix=/home/erikvs/privatemodules/nc4
+exec_prefix=${prefix}
+libdir=${exec_prefix}/lib
+includedir=${prefix}/include
+
+cc="gcc"
+cflags="-I${includedir} -I/home/erikvs/privatemodules/nc4/include"
+libs="-L${libdir} -lnetcdf"
+
+has_dap="yes"
+has_nc2="yes"
+has_nc4="yes"
+has_hdf4="no"
+has_pnetcdf="no"
+has_hdf5="yes"
+has_logging="no"
+version="netCDF 4.4.1.1"
+
+has_fortran="no"
+has_f90="no"
+has_f03="no"
+
+nfconf=$(which nf-config 2>/dev/null)
+
+if [ -f "$nfconf" ]; then
+  has_fortran="yes"
+  fc=`nf-config --fc`
+  fflags=`nf-config --fflags`
+  flibs=`nf-config --flibs`
+  has_f90=`nf-config --has-f90`
+  has_f03=`nf-config --has-f03`
+fi
+
+has_cxx="no"
+has_cxx4="no"
+if type -p ncxx4-config > /dev/null 2>&1; then
+  cxx4=`ncxx4-config --cxx`
+  cxx4flags=`ncxx4-config --cflags`
+  cxx4libs=`ncxx4-config --libs`
+  has_cxx4="yes"
+elif type -p ncxx-config > /dev/null 2>&1; then
+  cxx=`ncxx-config --cxx`
+  cxxflags=`ncxx-config --cflags`
+  cxxlibs=`ncxx-config --libs`
+  has_cxx="yes"
+fi
+
+usage()
+{
+    cat <<EOF
+Usage: nc-config [OPTION]
+
+Available values for OPTION include:
+
+  --help        display this help message and exit
+  --all         display all options
+  --cc          C compiler
+  --cflags      pre-processor and compiler flags
+  --has-c++     whether C++ API is installed
+  --has-c++4    whether netCDF-4 C++ API is installed
+  --has-fortran whether Fortran API is installed
+  --has-dap     whether OPeNDAP is enabled in this build
+  --has-nc2     whether NetCDF-2 API is enabled
+  --has-nc4     whether NetCDF-4/HDF-5 is enabled in this build
+  --has-hdf5    whether HDF5 is used in build (always the same as --has-nc4)
+  --has-hdf4    whether HDF4 was used in build
+  --has-logging whether logging is enabled with --enable-logging.
+  --has-pnetcdf whether parallel-netcdf (a.k.a. pnetcdf) was used in build
+  --has-szlib   whether szlib is included in build
+  --libs        library linking information for netcdf
+  --prefix      Install prefix
+  --includedir  Include directory
+  --libdir      Library directory
+  --version     Library version
+
+EOF
+if type -p ncxx4-config > /dev/null 2>&1; then
+    cat <<EOF
+  --cxx4        C++ compiler for netCDF-4 C++ library
+  --cxx4flags   flags needed to compile a C++ program
+  --cxx4libs    libraries needed to link a C++ program
+EOF
+elif type -p ncxx-config > /dev/null 2>&1; then
+    cat <<EOF
+  --cxx         C++ compiler
+  --cxxflags    flags needed to compile a C++ program
+  --cxxlibs     libraries needed to link a C++ program
+EOF
+fi
+if [ -f "$nfconf" ]; then
+    cat <<EOF
+  --fc          Fortran compiler
+  --fflags      flags needed to compile a Fortran program
+  --flibs       libraries needed to link a Fortran program
+  --has-f90     whether Fortran 90 API is installed
+  --has-f03     whether Fortran 03 API is installed (implies F90).
+EOF
+fi
+    exit $1
+}
+
+all()
+{
+        echo
+        echo "This $version has been built with the following features: "
+        echo
+        echo "  --cc        -> $cc"
+        echo "  --cflags    -> $cflags"
+        echo "  --libs      -> $libs"
+        echo
+        echo "  --has-c++   -> $has_cxx"
+        echo "  --cxx       -> $cxx"
+
+if type -p ncxx-config > /dev/null 2>&1; then
+        echo "  --cxxflags  -> $cxxflags"
+        echo "  --cxxlibs   -> $cxxlibs"
+fi
+        echo
+        echo "  --has-c++4  -> $has_cxx4"
+        echo "  --cxx4      -> $cxx4"
+if type -p ncxx4-config > /dev/null 2>&1; then
+        echo "  --cxx4flags -> $cxx4flags"
+        echo "  --cxx4libs  -> $cxx4libs"
+fi
+        echo
+
+        echo "  --has-fortran-> $has_fortran"
+if [ -f "$nfconf" ]; then
+        echo "  --fc        -> $fc"
+        echo "  --fflags    -> $fflags"
+        echo "  --flibs     -> $flibs"
+        echo "  --has-f90   -> $has_f90"
+        echo "  --has-f03   -> $has_f03"
+        echo
+fi
+        echo "  --has-dap   -> $has_dap"
+        echo "  --has-nc2   -> $has_nc2"
+        echo "  --has-nc4   -> $has_nc4"
+        echo "  --has-hdf5  -> $has_hdf5"
+        echo "  --has-hdf4  -> $has_hdf4"
+        echo "  --has-logging-> $has_logging"
+        echo "  --has-pnetcdf-> $has_pnetcdf"
+        echo "  --has-szlib -> $has_szlib"
+	echo
+        echo "  --prefix    -> $prefix"
+        echo "  --includedir-> $includedir"
+        echo "  --libdir    -> $libdir"
+        echo "  --version   -> $version"
+        echo
+}
+
+if test $# -eq 0; then
+    usage 1
+fi
+
+while test $# -gt 0; do
+    case "$1" in
+    # this deals with options in the style
+    # --option=value and extracts the value part
+    # [not currently used]
+    -*=*) value=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
+    *) value= ;;
+    esac
+
+    case "$1" in
+
+    --help)
+	usage 0
+	;;
+
+    --all)
+	all
+	;;
+
+    --cc)
+	echo $cc
+	;;
+
+    --cflags)
+	echo $cflags
+	;;
+
+    --has-dap)
+       	echo $has_dap
+       	;;
+
+    --has-nc2)
+       	echo $has_nc2
+       	;;
+
+    --has-nc4)
+       	echo $has_nc4
+       	;;
+
+    --has-hdf5)
+       	echo $has_hdf5
+       	;;
+
+    --has-hdf4)
+       	echo $has_hdf4
+       	;;
+
+    --has-logging)
+        echo $has_logging
+        ;;
+
+    --has-pnetcdf)
+       	echo $has_pnetcdf
+       	;;
+
+    --has-szlib)
+       	echo $has_szlib
+       	;;
+
+     --libs)
+       	echo $libs
+       	;;
+
+    --prefix)
+       	echo "${prefix}"
+       	;;
+
+    --includedir)
+       	echo "${includedir}"
+       	;;
+
+    --libdir)
+       	echo "${libdir}"
+       	;;
+
+    --version)
+	echo $version
+	;;
+
+    --has-c++)
+       	echo $has_cxx
+       	;;
+
+    --cxx)
+	echo $cxx
+	;;
+
+    --cxxflags)
+	echo $cxxflags
+	;;
+
+    --cxxlibs)
+	echo $cxxlibs
+	;;
+
+    --has-c++4)
+       	echo $has_cxx4
+       	;;
+
+    --cxx4)
+	echo $cxx4
+	;;
+
+    --cxx4flags)
+	echo $cxx4flags
+	;;
+
+    --cxx4libs)
+	echo $cxx4libs
+	;;
+
+    --has-fortran)
+        echo $has_fortran
+        ;;
+
+    --fc)
+	echo $fc
+	;;
+
+    --fflags)
+	echo $fflags
+	;;
+
+    --flibs)
+       	echo $flibs
+       	;;
+
+    --has-f90)
+       	echo $has_f90
+       	;;
+
+    --has-f03)
+       	echo $has_f03
+       	;;
+
+    *)
+        echo "unknown option: $1"
+	    usage 1
+	    ;;
+    esac
+    shift
+done
+
+exit 0
diff --git a/privatemodules/nc4/bin/nccopy b/privatemodules/nc4/bin/nccopy
new file mode 100755
index 0000000000000000000000000000000000000000..2587bb1ae07cadb2ffd4afff5ecc1363fa1894b9
Binary files /dev/null and b/privatemodules/nc4/bin/nccopy differ
diff --git a/privatemodules/nc4/bin/ncdump b/privatemodules/nc4/bin/ncdump
new file mode 100755
index 0000000000000000000000000000000000000000..b61f2f51688ac0088b566b23672a21f942a64f80
Binary files /dev/null and b/privatemodules/nc4/bin/ncdump differ
diff --git a/privatemodules/nc4/bin/ncgen b/privatemodules/nc4/bin/ncgen
new file mode 100755
index 0000000000000000000000000000000000000000..144d9e1ee76b97acffaa7e0adb268fd9ffa4da32
Binary files /dev/null and b/privatemodules/nc4/bin/ncgen differ
diff --git a/privatemodules/nc4/bin/ncgen3 b/privatemodules/nc4/bin/ncgen3
new file mode 100755
index 0000000000000000000000000000000000000000..c8c1fec6fe74344ce442b777012430a257d7ee53
Binary files /dev/null and b/privatemodules/nc4/bin/ncgen3 differ
diff --git a/privatemodules/nc4/bin/nf-config b/privatemodules/nc4/bin/nf-config
new file mode 100755
index 0000000000000000000000000000000000000000..b0a2c56e8a1064393e4ae5fad066e78f800fcee3
--- /dev/null
+++ b/privatemodules/nc4/bin/nf-config
@@ -0,0 +1,158 @@
+#! /bin/sh
+#
+# This forms the basis for the nf-config utility, which tells you
+# various things about the netCDF fortran installation.
+
+prefix=/home/erikvs/privatemodules/nc4
+exec_prefix=${prefix}
+libdir=${exec_prefix}/lib
+includedir=${prefix}/include
+
+cc="gcc"
+fc="gfortran"
+cflags=" -I${includedir} -I/home/erikvs/privatemodules/nc4/include" 
+fflags="-I${includedir}"
+has_dap="yes"
+has_nc2="yes"
+has_nc4="yes"
+has_f90="no"
+has_f03="yes"
+flibs="-L${libdir} -lnetcdff -L/home/erikvs/privatemodules/nc4/lib -lnetcdf -lnetcdf "
+version="netCDF-Fortran 4.4.4"
+
+usage()
+{
+    cat <<EOF
+Usage: nf-config [OPTION]
+
+Available values for OPTION include:
+
+  --help        display this help message and exit
+  --all         display all options
+  --cc          C compiler
+  --fc          Fortran compiler
+  --cflags      pre-processor and compiler flags
+  --fflags      flags needed to compile a Fortran program
+  --has-dap     whether OPeNDAP is enabled in this build
+  --has-nc2     whether NetCDF-2 API is enabled
+  --has-nc4     whether NetCDF-4/HDF-5 is enabled in this build
+  --has-f90     whether Fortran 90 API is enabled in this build
+  --has-f03     whether Fortran 2003 API is enabled in this build
+  --flibs       libraries needed to link a Fortran program
+  --prefix      Install prefix
+  --includedir  Include directory
+  --version     Library version
+
+EOF
+
+    exit $1
+}
+
+all()
+{
+        echo
+        echo "This $version has been built with the following features: "
+        echo
+        echo "  --cc        -> $cc"
+        echo "  --cflags    -> $cflags"
+        echo
+        echo "  --fc        -> $fc"
+        echo "  --fflags    -> $fflags"
+        echo "  --flibs     -> $flibs"
+        echo "  --has-f90   -> $has_f90"
+        echo "  --has-f03   -> $has_f03"
+        echo
+        echo "  --has-nc2   -> $has_nc2"
+        echo "  --has-nc4   -> $has_nc4"
+	echo
+        echo "  --prefix    -> $prefix"
+        echo "  --includedir-> $includedir"
+        echo "  --version   -> $version"
+        echo
+}
+
+if test $# -eq 0; then
+    usage 1
+fi
+
+while test $# -gt 0; do
+    case "$1" in
+    # this deals with options in the style
+    # --option=value and extracts the value part
+    # [not currently used]
+    -*=*) value=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
+    *) value= ;;
+    esac
+
+    case "$1" in
+
+    --help)
+	usage 0
+	;;
+
+    --all)
+	all
+	;;
+
+    --cc)
+	echo $cc
+	;;
+
+    --fc)
+	echo $fc
+	;;
+
+    --cflags)
+	echo $cflags
+	;;
+
+    --fflags)
+	echo $fflags
+	;;
+
+    --has-dap)
+       	echo $has_dap
+       	;;
+
+    --has-nc2)
+       	echo $has_nc2
+       	;;
+
+    --has-nc4)
+       	echo $has_nc4
+       	;;
+
+    --has-f90)
+       	echo $has_f90
+       	;;
+
+    --has-f03)
+       	echo $has_f03
+       	;;
+
+    --flibs)
+       	echo $flibs
+       	;;
+
+    --prefix)
+       	echo "${prefix}"
+       	;;
+
+    --includedir)
+       	echo "${includedir}"
+       	;;
+
+    --version)
+	echo $version
+	;;
+
+    *)
+        echo "unknown option: $1"
+	usage
+	exit 1
+	;;
+    esac
+    shift
+done
+
+exit 0
diff --git a/privatemodules/nc4/include/H5ACpublic.h b/privatemodules/nc4/include/H5ACpublic.h
new file mode 100644
index 0000000000000000000000000000000000000000..639179ce3b2bcc253739764d7f5f1b4b648c9024
--- /dev/null
+++ b/privatemodules/nc4/include/H5ACpublic.h
@@ -0,0 +1,508 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*-------------------------------------------------------------------------
+ *
+ * Created:             H5ACpublic.h
+ *                      Jul 10 1997
+ *                      Robb Matzke <matzke@llnl.gov>
+ *
+ * Purpose:             Public include file for cache functions.
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef _H5ACpublic_H
+#define _H5ACpublic_H
+
+/* Public headers needed by this file */
+#include "H5public.h"
+#include "H5Cpublic.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/****************************************************************************
+ *
+ * structure H5AC_cache_config_t
+ *
+ * H5AC_cache_config_t is a public structure intended for use in public APIs.
+ * At least in its initial incarnation, it is basicaly a copy of struct
+ * H5C_auto_size_ctl_t, minus the report_fcn field, and plus the
+ * dirty_bytes_threshold field.
+ *
+ * The report_fcn field is omitted, as including it would require us to
+ * make H5C_t structure public.
+ *
+ * The dirty_bytes_threshold field does not appear in H5C_auto_size_ctl_t,
+ * as synchronization between caches on different processes is handled at
+ * the H5AC level, not at the level of H5C.  Note however that there is
+ * considerable interaction between this value and the other fields in this
+ * structure.
+ *
+ * Similarly, the open_trace_file, close_trace_file, and trace_file_name
+ * fields do not appear in H5C_auto_size_ctl_t, as most trace file
+ * issues are handled at the H5AC level.  The one exception is storage of
+ * the pointer to the trace file, which is handled by H5C.
+ *
+ * The structure is in H5ACpublic.h as we may wish to allow different
+ * configuration options for metadata and raw data caches.
+ *
+ * The fields of the structure are discussed individually below:
+ *
+ * version: Integer field containing the version number of this version
+ *      of the H5AC_cache_config_t structure.  Any instance of
+ *      H5AC_cache_config_t passed to the cache must have a known
+ *      version number, or an error will be flagged.
+ *
+ * rpt_fcn_enabled: Boolean field used to enable and disable the default
+ *	reporting function.  This function is invoked every time the
+ *	automatic cache resize code is run, and reports on its activities.
+ *
+ *	This is a debugging function, and should normally be turned off.
+ *
+ * open_trace_file: Boolean field indicating whether the trace_file_name
+ * 	field should be used to open a trace file for the cache.
+ *
+ * 	The trace file is a debuging feature that allow the capture of
+ * 	top level metadata cache requests for purposes of debugging and/or
+ * 	optimization.  This field should normally be set to FALSE, as
+ * 	trace file collection imposes considerable overhead.
+ *
+ * 	This field should only be set to TRUE when the trace_file_name
+ * 	contains the full path of the desired trace file, and either
+ * 	there is no open trace file on the cache, or the close_trace_file
+ * 	field is also TRUE.
+ *
+ * close_trace_file: Boolean field indicating whether the current trace
+ * 	file (if any) should be closed.
+ *
+ * 	See the above comments on the open_trace_file field.  This field
+ * 	should be set to FALSE unless there is an open trace file on the
+ * 	cache that you wish to close.
+ *
+ * trace_file_name: Full path of the trace file to be opened if the
+ * 	open_trace_file field is TRUE.
+ *
+ * 	In the parallel case, an ascii representation of the mpi rank of
+ * 	the process will be appended to the file name to yield a unique
+ * 	trace file name for each process.
+ *
+ * 	The length of the path must not exceed H5AC__MAX_TRACE_FILE_NAME_LEN
+ * 	characters.
+ *
+ * evictions_enabled:  Boolean field used to either report the current
+ * 	evictions enabled status of the cache, or to set the cache's
+ *	evictions enabled status.
+ *
+ * 	In general, the metadata cache should always be allowed to
+ * 	evict entries.  However, in some cases it is advantageous to
+ * 	disable evictions briefly, and thereby postpone metadata
+ * 	writes.  However, this must be done with care, as the cache
+ * 	can grow quickly.  If you do this, re-enable evictions as
+ * 	soon as possible and monitor cache size.
+ *
+ * 	At present, evictions can only be disabled if automatic
+ * 	cache resizing is also disabled (that is, ( incr_mode ==
+ *	H5C_incr__off ) && ( decr_mode == H5C_decr__off )).  There
+ *	is no logical reason why this should be so, but it simplifies
+ *	implementation and testing, and I can't think of any reason
+ *	why it would be desireable.  If you can think of one, I'll
+ *	revisit the issue.
+ *
+ * set_initial_size: Boolean flag indicating whether the size of the
+ *      initial size of the cache is to be set to the value given in
+ *      the initial_size field.  If set_initial_size is FALSE, the
+ *      initial_size field is ignored.
+ *
+ * initial_size: If enabled, this field contain the size the cache is
+ *      to be set to upon receipt of this structure.  Needless to say,
+ *      initial_size must lie in the closed interval [min_size, max_size].
+ *
+ * min_clean_fraction: double in the range 0 to 1 indicating the fraction
+ *      of the cache that is to be kept clean.  This field is only used
+ *      in parallel mode.  Typical values are 0.1 to 0.5.
+ *
+ * max_size: Maximum size to which the cache can be adjusted.  The
+ *      supplied value must fall in the closed interval
+ *      [MIN_MAX_CACHE_SIZE, MAX_MAX_CACHE_SIZE].  Also, max_size must
+ *      be greater than or equal to min_size.
+ *
+ * min_size: Minimum size to which the cache can be adjusted.  The
+ *      supplied value must fall in the closed interval
+ *      [H5C__MIN_MAX_CACHE_SIZE, H5C__MAX_MAX_CACHE_SIZE].  Also, min_size
+ *      must be less than or equal to max_size.
+ *
+ * epoch_length: Number of accesses on the cache over which to collect
+ *      hit rate stats before running the automatic cache resize code,
+ *      if it is enabled.
+ *
+ *      At the end of an epoch, we discard prior hit rate data and start
+ *      collecting afresh.  The epoch_length must lie in the closed
+ *      interval [H5C__MIN_AR_EPOCH_LENGTH, H5C__MAX_AR_EPOCH_LENGTH].
+ *
+ *
+ * Cache size increase control fields:
+ *
+ * incr_mode: Instance of the H5C_cache_incr_mode enumerated type whose
+ *      value indicates how we determine whether the cache size should be
+ *      increased.  At present there are two possible values:
+ *
+ *      H5C_incr__off:  Don't attempt to increase the size of the cache
+ *              automatically.
+ *
+ *              When this increment mode is selected, the remaining fields
+ *              in the cache size increase section ar ignored.
+ *
+ *      H5C_incr__threshold: Attempt to increase the size of the cache
+ *              whenever the average hit rate over the last epoch drops
+ *              below the value supplied in the lower_hr_threshold
+ *              field.
+ *
+ *              Note that this attempt will fail if the cache is already
+ *              at its maximum size, or if the cache is not already using
+ *              all available space.
+ *
+ *      Note that you must set decr_mode to H5C_incr__off if you
+ *      disable metadata cache entry evictions.
+ *
+ * lower_hr_threshold: Lower hit rate threshold.  If the increment mode
+ *      (incr_mode) is H5C_incr__threshold and the hit rate drops below the
+ *      value supplied in this field in an epoch, increment the cache size by
+ *      size_increment.  Note that cache size may not be incremented above
+ *      max_size, and that the increment may be further restricted by the
+ *      max_increment field if it is enabled.
+ *
+ *      When enabled, this field must contain a value in the range [0.0, 1.0].
+ *      Depending on the incr_mode selected, it may also have to be less than
+ *      upper_hr_threshold.
+ *
+ * increment:  Double containing the multiplier used to derive the new
+ *      cache size from the old if a cache size increment is triggered.
+ *      The increment must be greater than 1.0, and should not exceed 2.0.
+ *
+ *      The new cache size is obtained my multiplying the current max cache
+ *      size by the increment, and then clamping to max_size and to stay
+ *      within the max_increment as necessary.
+ *
+ * apply_max_increment:  Boolean flag indicating whether the max_increment
+ *      field should be used to limit the maximum cache size increment.
+ *
+ * max_increment: If enabled by the apply_max_increment field described
+ *      above, this field contains the maximum number of bytes by which the
+ *      cache size can be increased in a single re-size.
+ *
+ * flash_incr_mode:  Instance of the H5C_cache_flash_incr_mode enumerated
+ *      type whose value indicates whether and by which algorithm we should
+ *      make flash increases in the size of the cache to accomodate insertion
+ *      of large entries and large increases in the size of a single entry.
+ *
+ *      The addition of the flash increment mode was occasioned by performance
+ *      problems that appear when a local heap is increased to a size in excess
+ *      of the current cache size.  While the existing re-size code dealt with
+ *      this eventually, performance was very bad for the remainder of the
+ *      epoch.
+ *
+ *      At present, there are two possible values for the flash_incr_mode:
+ *
+ *      H5C_flash_incr__off:  Don't perform flash increases in the size of
+ *              the cache.
+ *
+ *      H5C_flash_incr__add_space:  Let x be either the size of a newly
+ *              newly inserted entry, or the number of bytes by which the
+ *              size of an existing entry has been increased.
+ *
+ *              If
+ *                      x > flash_threshold * current max cache size,
+ *
+ *              increase the current maximum cache size by x * flash_multiple
+ *              less any free space in the cache, and star a new epoch.  For
+ *              now at least, pay no attention to the maximum increment.
+ *
+ *      In both of the above cases, the flash increment pays no attention to
+ *      the maximum increment (at least in this first incarnation), but DOES
+ *      stay within max_size.
+ *
+ *      With a little thought, it should be obvious that the above flash
+ *      cache size increase algorithm is not sufficient for all circumstances
+ *      -- for example, suppose the user round robins through
+ *      (1/flash_threshold) +1 groups, adding one data set to each on each
+ *      pass.  Then all will increase in size at about the same time, requiring
+ *      the max cache size to at least double to maintain acceptable
+ *      performance, however the above flash increment algorithm will not be
+ *      triggered.
+ *
+ *      Hopefully, the add space algorithms detailed above will be sufficient
+ *      for the performance problems encountered to date.  However, we should
+ *      expect to revisit the issue.
+ *
+ * flash_multiple: Double containing the multiple described above in the
+ *      H5C_flash_incr__add_space section of the discussion of the
+ *      flash_incr_mode section.  This field is ignored unless flash_incr_mode
+ *      is H5C_flash_incr__add_space.
+ *
+ * flash_threshold: Double containing the factor by which current max cache
+ *      size is multiplied to obtain the size threshold for the add_space flash
+ *      increment algorithm.  The field is ignored unless flash_incr_mode is
+ *      H5C_flash_incr__add_space.
+ *
+ *
+ * Cache size decrease control fields:
+ *
+ * decr_mode: Instance of the H5C_cache_decr_mode enumerated type whose
+ *      value indicates how we determine whether the cache size should be
+ *      decreased.  At present there are four possibilities.
+ *
+ *      H5C_decr__off:  Don't attempt to decrease the size of the cache
+ *              automatically.
+ *
+ *              When this increment mode is selected, the remaining fields
+ *              in the cache size decrease section are ignored.
+ *
+ *      H5C_decr__threshold: Attempt to decrease the size of the cache
+ *              whenever the average hit rate over the last epoch rises
+ *              above the value supplied in the upper_hr_threshold
+ *              field.
+ *
+ *      H5C_decr__age_out:  At the end of each epoch, search the cache for
+ *              entries that have not been accessed for at least the number
+ *              of epochs specified in the epochs_before_eviction field, and
+ *              evict these entries.  Conceptually, the maximum cache size
+ *              is then decreased to match the new actual cache size.  However,
+ *              this reduction may be modified by the min_size, the
+ *              max_decrement, and/or the empty_reserve.
+ *
+ *      H5C_decr__age_out_with_threshold:  Same as age_out, but we only
+ *              attempt to reduce the cache size when the hit rate observed
+ *              over the last epoch exceeds the value provided in the
+ *              upper_hr_threshold field.
+ *
+ *      Note that you must set decr_mode to H5C_decr__off if you
+ *      disable metadata cache entry evictions.
+ *
+ * upper_hr_threshold: Upper hit rate threshold.  The use of this field
+ *      varies according to the current decr_mode:
+ *
+ *      H5C_decr__off or H5C_decr__age_out:  The value of this field is
+ *              ignored.
+ *
+ *      H5C_decr__threshold:  If the hit rate exceeds this threshold in any
+ *              epoch, attempt to decrement the cache size by size_decrement.
+ *
+ *              Note that cache size may not be decremented below min_size.
+ *
+ *              Note also that if the upper_threshold is 1.0, the cache size
+ *              will never be reduced.
+ *
+ *      H5C_decr__age_out_with_threshold:  If the hit rate exceeds this
+ *              threshold in any epoch, attempt to reduce the cache size
+ *              by evicting entries that have not been accessed for more
+ *              than the specified number of epochs.
+ *
+ * decrement: This field is only used when the decr_mode is
+ *      H5C_decr__threshold.
+ *
+ *      The field is a double containing the multiplier used to derive the
+ *      new cache size from the old if a cache size decrement is triggered.
+ *      The decrement must be in the range 0.0 (in which case the cache will
+ *      try to contract to its minimum size) to 1.0 (in which case the
+ *      cache will never shrink).
+ *
+ * apply_max_decrement:  Boolean flag used to determine whether decrements
+ *      in cache size are to be limited by the max_decrement field.
+ *
+ * max_decrement: Maximum number of bytes by which the cache size can be
+ *      decreased in a single re-size.  Note that decrements may also be
+ *      restricted by the min_size of the cache, and (in age out modes) by
+ *      the empty_reserve field.
+ *
+ * epochs_before_eviction:  Integer field used in H5C_decr__age_out and
+ *      H5C_decr__age_out_with_threshold decrement modes.
+ *
+ *      This field contains the number of epochs an entry must remain
+ *      unaccessed before it is evicted in an attempt to reduce the
+ *      cache size.  If applicable, this field must lie in the range
+ *      [1, H5C__MAX_EPOCH_MARKERS].
+ *
+ * apply_empty_reserve:  Boolean field controlling whether the empty_reserve
+ *      field is to be used in computing the new cache size when the
+ *      decr_mode is H5C_decr__age_out or H5C_decr__age_out_with_threshold.
+ *
+ * empty_reserve:  To avoid a constant racheting down of cache size by small
+ *      amounts in the H5C_decr__age_out and H5C_decr__age_out_with_threshold
+ *      modes, this field allows one to require that any cache size
+ *      reductions leave the specified fraction of unused space in the cache.
+ *
+ *      The value of this field must be in the range [0.0, 1.0].  I would
+ *      expect typical values to be in the range of 0.01 to 0.1.
+ *
+ *
+ * Parallel Configuration Fields:
+ *
+ * In PHDF5, all operations that modify metadata must be executed collectively.
+ *
+ * We used to think that this was enough to ensure consistency across the
+ * metadata caches, but since we allow processes to read metadata individually,
+ * the order of dirty entries in the LRU list can vary across processes,
+ * which can result in inconsistencies between the caches.
+ *
+ * PHDF5 uses several strategies to prevent such inconsistencies in metadata,
+ * all of which use the fact that the same stream of dirty metadata is seen
+ * by all processes for purposes of synchronization.  This is done by 
+ * having each process count the number of bytes of dirty metadata generated,
+ * and then running a "sync point" whenever this count exceeds a user 
+ * specified threshold (see dirty_bytes_threshold below).
+ *
+ * The current metadata write strategy is indicated by the 
+ * metadata_write_strategy field.  The possible values of this field, along
+ * with the associated metadata write strategies are discussed below.
+ *
+ * dirty_bytes_threshold:  Threshold of dirty byte creation used to
+ * 	synchronize updates between caches. (See above for outline and
+ *	motivation.)
+ *
+ *	This value MUST be consistant across all processes accessing the
+ *	file.  This field is ignored unless HDF5 has been compiled for
+ *	parallel.
+ *
+ * metadata_write_strategy: Integer field containing a code indicating the
+ *	desired metadata write strategy.  The valid values of this field
+ *	are enumerated and discussed below:
+ *
+ *
+ *	H5AC_METADATA_WRITE_STRATEGY__PROCESS_0_ONLY:
+ *
+ *	When metadata_write_strategy is set to this value, only process 
+ *	zero is allowed to write dirty metadata to disk.  All other 
+ *	processes must retain dirty metadata until they are informed at
+ *	a sync point that the dirty metadata in question has been written
+ *	to disk.
+ *
+ *	When the sync point is reached (or when there is a user generated
+ *	flush), process zero flushes sufficient entries to bring it into
+ *	complience with its min clean size (or flushes all dirty entries in
+ *	the case of a user generated flush), broad casts the list of 
+ *	entries just cleaned to all the other processes, and then exits
+ *	the sync point.
+ *
+ *	Upon receipt of the broadcast, the other processes mark the indicated
+ *	entries as clean, and leave the sync point as well.
+ *
+ *
+ *	H5AC_METADATA_WRITE_STRATEGY__DISTRIBUTED:
+ *
+ *	In the distributed metadata write strategy, process zero still makes
+ *	the decisions as to what entries should be flushed, but the actual 
+ *	flushes are distributed across the processes in the computation to 
+ *	the extent possible.
+ *
+ *	In this strategy, when a sync point is triggered (either by dirty
+ *	metadata creation or manual flush), all processes enter a barrier.
+ *
+ *	On the other side of the barrier, process 0 constructs an ordered
+ *	list of the entries to be flushed, and then broadcasts this list
+ *	to the caches in all the processes.
+ *
+ *	All processes then scan the list of entries to be flushed, flushing
+ *	some, and marking the rest as clean.  The algorithm for this purpose
+ *	ensures that each entry in the list is flushed exactly once, and 
+ *	all are marked clean in each cache.
+ *
+ *	Note that in the case of a flush of the cache, no message passing
+ *	is necessary, as all processes have the same list of dirty entries, 
+ *	and all of these entries must be flushed.  Thus in this case it is 
+ *	sufficient for each process to sort its list of dirty entries after 
+ *	leaving the initial barrier, and use this list as if it had been 
+ *	received from process zero.
+ *
+ *	To avoid possible messages from the past/future, all caches must
+ *	wait until all caches are done before leaving the sync point.
+ *      
+ ****************************************************************************/
+
+#define H5AC__CURR_CACHE_CONFIG_VERSION 	1
+#define H5AC__MAX_TRACE_FILE_NAME_LEN		1024
+
+#define H5AC_METADATA_WRITE_STRATEGY__PROCESS_0_ONLY    0
+#define H5AC_METADATA_WRITE_STRATEGY__DISTRIBUTED       1
+
+typedef struct H5AC_cache_config_t
+{
+    /* general configuration fields: */
+    int                      version;
+
+    hbool_t		     rpt_fcn_enabled;
+
+    hbool_t		     open_trace_file;
+    hbool_t                  close_trace_file;
+    char                     trace_file_name[H5AC__MAX_TRACE_FILE_NAME_LEN + 1];
+
+    hbool_t                  evictions_enabled;
+
+    hbool_t                  set_initial_size;
+    size_t                   initial_size;
+
+    double                   min_clean_fraction;
+
+    size_t                   max_size;
+    size_t                   min_size;
+
+    long int                 epoch_length;
+
+
+    /* size increase control fields: */
+    enum H5C_cache_incr_mode incr_mode;
+
+    double                   lower_hr_threshold;
+
+    double                   increment;
+
+    hbool_t                  apply_max_increment;
+    size_t                   max_increment;
+
+    enum H5C_cache_flash_incr_mode      flash_incr_mode;
+    double                              flash_multiple;
+    double                              flash_threshold;
+
+
+    /* size decrease control fields: */
+    enum H5C_cache_decr_mode decr_mode;
+
+    double                   upper_hr_threshold;
+
+    double                   decrement;
+
+    hbool_t                  apply_max_decrement;
+    size_t                   max_decrement;
+
+    int                      epochs_before_eviction;
+
+    hbool_t                  apply_empty_reserve;
+    double                   empty_reserve;
+
+
+    /* parallel configuration fields: */
+    int                      dirty_bytes_threshold;
+    int                      metadata_write_strategy;
+
+} H5AC_cache_config_t;
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/privatemodules/nc4/include/H5Apublic.h b/privatemodules/nc4/include/H5Apublic.h
new file mode 100644
index 0000000000000000000000000000000000000000..99ca90e114a779e464ad138f57e5b045baf30a13
--- /dev/null
+++ b/privatemodules/nc4/include/H5Apublic.h
@@ -0,0 +1,120 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * This file contains public declarations for the H5A module.
+ */
+#ifndef _H5Apublic_H
+#define _H5Apublic_H
+
+/* Public headers needed by this file */
+#include "H5Ipublic.h"		/* IDs			  		*/
+#include "H5Opublic.h"		/* Object Headers			*/
+#include "H5Tpublic.h"		/* Datatypes				*/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Information struct for attribute (for H5Aget_info/H5Aget_info_by_idx) */
+typedef struct {
+    hbool_t             corder_valid;   /* Indicate if creation order is valid */
+    H5O_msg_crt_idx_t   corder;         /* Creation order                 */
+    H5T_cset_t          cset;           /* Character set of attribute name */
+    hsize_t             data_size;      /* Size of raw data		  */
+} H5A_info_t;
+
+/* Typedef for H5Aiterate2() callbacks */
+typedef herr_t (*H5A_operator2_t)(hid_t location_id/*in*/,
+    const char *attr_name/*in*/, const H5A_info_t *ainfo/*in*/, void *op_data/*in,out*/);
+
+/* Public function prototypes */
+H5_DLL hid_t   H5Acreate2(hid_t loc_id, const char *attr_name, hid_t type_id,
+    hid_t space_id, hid_t acpl_id, hid_t aapl_id);
+H5_DLL hid_t   H5Acreate_by_name(hid_t loc_id, const char *obj_name, const char *attr_name,
+    hid_t type_id, hid_t space_id, hid_t acpl_id, hid_t aapl_id, hid_t lapl_id);
+H5_DLL hid_t   H5Aopen(hid_t obj_id, const char *attr_name, hid_t aapl_id);
+H5_DLL hid_t   H5Aopen_by_name(hid_t loc_id, const char *obj_name,
+    const char *attr_name, hid_t aapl_id, hid_t lapl_id);
+H5_DLL hid_t   H5Aopen_by_idx(hid_t loc_id, const char *obj_name,
+    H5_index_t idx_type, H5_iter_order_t order, hsize_t n, hid_t aapl_id,
+    hid_t lapl_id);
+H5_DLL herr_t  H5Awrite(hid_t attr_id, hid_t type_id, const void *buf);
+H5_DLL herr_t  H5Aread(hid_t attr_id, hid_t type_id, void *buf);
+H5_DLL herr_t  H5Aclose(hid_t attr_id);
+H5_DLL hid_t   H5Aget_space(hid_t attr_id);
+H5_DLL hid_t   H5Aget_type(hid_t attr_id);
+H5_DLL hid_t   H5Aget_create_plist(hid_t attr_id);
+H5_DLL ssize_t H5Aget_name(hid_t attr_id, size_t buf_size, char *buf);
+H5_DLL ssize_t H5Aget_name_by_idx(hid_t loc_id, const char *obj_name,
+    H5_index_t idx_type, H5_iter_order_t order, hsize_t n,
+    char *name /*out*/, size_t size, hid_t lapl_id);
+H5_DLL hsize_t H5Aget_storage_size(hid_t attr_id);
+H5_DLL herr_t  H5Aget_info(hid_t attr_id, H5A_info_t *ainfo /*out*/);
+H5_DLL herr_t  H5Aget_info_by_name(hid_t loc_id, const char *obj_name,
+    const char *attr_name, H5A_info_t *ainfo /*out*/, hid_t lapl_id);
+H5_DLL herr_t  H5Aget_info_by_idx(hid_t loc_id, const char *obj_name,
+    H5_index_t idx_type, H5_iter_order_t order, hsize_t n,
+    H5A_info_t *ainfo /*out*/, hid_t lapl_id);
+H5_DLL herr_t  H5Arename(hid_t loc_id, const char *old_name, const char *new_name);
+H5_DLL herr_t  H5Arename_by_name(hid_t loc_id, const char *obj_name,
+    const char *old_attr_name, const char *new_attr_name, hid_t lapl_id);
+H5_DLL herr_t  H5Aiterate2(hid_t loc_id, H5_index_t idx_type,
+    H5_iter_order_t order, hsize_t *idx, H5A_operator2_t op, void *op_data);
+H5_DLL herr_t  H5Aiterate_by_name(hid_t loc_id, const char *obj_name, H5_index_t idx_type,
+    H5_iter_order_t order, hsize_t *idx, H5A_operator2_t op, void *op_data,
+    hid_t lapd_id);
+H5_DLL herr_t  H5Adelete(hid_t loc_id, const char *name);
+H5_DLL herr_t  H5Adelete_by_name(hid_t loc_id, const char *obj_name,
+    const char *attr_name, hid_t lapl_id);
+H5_DLL herr_t  H5Adelete_by_idx(hid_t loc_id, const char *obj_name,
+    H5_index_t idx_type, H5_iter_order_t order, hsize_t n, hid_t lapl_id);
+H5_DLL htri_t H5Aexists(hid_t obj_id, const char *attr_name);
+H5_DLL htri_t H5Aexists_by_name(hid_t obj_id, const char *obj_name,
+    const char *attr_name, hid_t lapl_id);
+
+/* Symbols defined for compatibility with previous versions of the HDF5 API.
+ *
+ * Use of these symbols is deprecated.
+ */
+#ifndef H5_NO_DEPRECATED_SYMBOLS
+
+/* Macros */
+
+
+/* Typedefs */
+
+/* Typedef for H5Aiterate1() callbacks */
+typedef herr_t (*H5A_operator1_t)(hid_t location_id/*in*/,
+    const char *attr_name/*in*/, void *operator_data/*in,out*/);
+
+
+/* Function prototypes */
+H5_DLL hid_t   H5Acreate1(hid_t loc_id, const char *name, hid_t type_id,
+    hid_t space_id, hid_t acpl_id);
+H5_DLL hid_t   H5Aopen_name(hid_t loc_id, const char *name);
+H5_DLL hid_t   H5Aopen_idx(hid_t loc_id, unsigned idx);
+H5_DLL int     H5Aget_num_attrs(hid_t loc_id);
+H5_DLL herr_t  H5Aiterate1(hid_t loc_id, unsigned *attr_num, H5A_operator1_t op,
+    void *op_data);
+
+#endif /* H5_NO_DEPRECATED_SYMBOLS */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _H5Apublic_H */
+
diff --git a/privatemodules/nc4/include/H5Cpublic.h b/privatemodules/nc4/include/H5Cpublic.h
new file mode 100644
index 0000000000000000000000000000000000000000..39ebbe3760a183d8fdbb3f9d260fe8af851cf64a
--- /dev/null
+++ b/privatemodules/nc4/include/H5Cpublic.h
@@ -0,0 +1,61 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*-------------------------------------------------------------------------
+ *
+ * Created:	H5Cpublic.h
+ *              June 4, 2005
+ *              John Mainzer
+ *
+ * Purpose:     Public include file for cache functions.
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef _H5Cpublic_H
+#define _H5Cpublic_H
+
+/* Public headers needed by this file */
+#include "H5public.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+enum H5C_cache_incr_mode
+{
+    H5C_incr__off,
+    H5C_incr__threshold
+};
+
+enum H5C_cache_flash_incr_mode
+{
+     H5C_flash_incr__off,
+     H5C_flash_incr__add_space
+};
+
+enum H5C_cache_decr_mode
+{
+    H5C_decr__off,
+    H5C_decr__threshold,
+    H5C_decr__age_out,
+    H5C_decr__age_out_with_threshold
+};
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/privatemodules/nc4/include/H5DOpublic.h b/privatemodules/nc4/include/H5DOpublic.h
new file mode 100644
index 0000000000000000000000000000000000000000..774709eb87ab1bcbc001f92d5f61a5d797d9b781
--- /dev/null
+++ b/privatemodules/nc4/include/H5DOpublic.h
@@ -0,0 +1,42 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef _H5DOpublic_H
+#define _H5DOpublic_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*-------------------------------------------------------------------------
+ *
+ * Direct chunk write function
+ *
+ *-------------------------------------------------------------------------
+ */
+
+H5_HLDLL herr_t H5DOwrite_chunk(hid_t dset_id, 
+			hid_t dxpl_id, 
+			uint32_t filters, 
+			const hsize_t *offset, 
+         		size_t data_size, 
+			const void *buf);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
diff --git a/privatemodules/nc4/include/H5DSpublic.h b/privatemodules/nc4/include/H5DSpublic.h
new file mode 100644
index 0000000000000000000000000000000000000000..85923f8cc2b17a06bafdbc1534a08c96c56c2493
--- /dev/null
+++ b/privatemodules/nc4/include/H5DSpublic.h
@@ -0,0 +1,79 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef _H5DSpublic_H
+#define _H5DSpublic_H
+
+
+
+#define DIMENSION_SCALE_CLASS "DIMENSION_SCALE"
+#define DIMENSION_LIST        "DIMENSION_LIST"
+#define REFERENCE_LIST        "REFERENCE_LIST"
+#define DIMENSION_LABELS      "DIMENSION_LABELS"
+
+
+typedef herr_t  (*H5DS_iterate_t)(hid_t dset, unsigned dim, hid_t scale, void *visitor_data);
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+H5_HLDLL herr_t  H5DSattach_scale( hid_t did,
+                        hid_t dsid,
+                        unsigned int idx);
+
+H5_HLDLL herr_t  H5DSdetach_scale( hid_t did,
+                        hid_t dsid,
+                        unsigned int idx);
+
+H5_HLDLL herr_t  H5DSset_scale( hid_t dsid,
+                     const char *dimname);
+
+H5_HLDLL int H5DSget_num_scales( hid_t did,
+                       unsigned int dim);
+
+H5_HLDLL herr_t  H5DSset_label( hid_t did,
+                     unsigned int idx,
+                     const char *label);
+
+H5_HLDLL ssize_t H5DSget_label( hid_t did,
+                      unsigned int idx,
+                      char *label,
+                      size_t size);
+
+H5_HLDLL ssize_t H5DSget_scale_name( hid_t did,
+                           char *name,
+                           size_t size);
+
+H5_HLDLL htri_t H5DSis_scale( hid_t did);
+
+H5_HLDLL herr_t  H5DSiterate_scales( hid_t did,
+                          unsigned int dim,
+                          int *idx,
+                          H5DS_iterate_t visitor,
+                          void *visitor_data);
+
+H5_HLDLL htri_t H5DSis_attached( hid_t did,
+                       hid_t dsid,
+                       unsigned int idx);
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/privatemodules/nc4/include/H5Dpublic.h b/privatemodules/nc4/include/H5Dpublic.h
new file mode 100644
index 0000000000000000000000000000000000000000..4309d6409c38800eeb64b92f39eb969d6ee61e6e
--- /dev/null
+++ b/privatemodules/nc4/include/H5Dpublic.h
@@ -0,0 +1,173 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * This file contains public declarations for the H5D module.
+ */
+#ifndef _H5Dpublic_H
+#define _H5Dpublic_H
+
+/* System headers needed by this file */
+
+/* Public headers needed by this file */
+#include "H5public.h"
+#include "H5Ipublic.h"
+
+/*****************/
+/* Public Macros */
+/*****************/
+
+/* Macros used to "unset" chunk cache configuration parameters */
+#define H5D_CHUNK_CACHE_NSLOTS_DEFAULT     ((size_t) -1)
+#define H5D_CHUNK_CACHE_NBYTES_DEFAULT      ((size_t) -1)
+#define H5D_CHUNK_CACHE_W0_DEFAULT          -1.
+
+/* Property names for H5LTDdirect_chunk_write */   
+#define H5D_XFER_DIRECT_CHUNK_WRITE_FLAG_NAME	        "direct_chunk_flag"
+#define H5D_XFER_DIRECT_CHUNK_WRITE_FILTERS_NAME	"direct_chunk_filters"
+#define H5D_XFER_DIRECT_CHUNK_WRITE_OFFSET_NAME		"direct_chunk_offset"
+#define H5D_XFER_DIRECT_CHUNK_WRITE_DATASIZE_NAME	"direct_chunk_datasize"
+ 
+/*******************/
+/* Public Typedefs */
+/*******************/
+
+/* Values for the H5D_LAYOUT property */
+typedef enum H5D_layout_t {
+    H5D_LAYOUT_ERROR	= -1,
+
+    H5D_COMPACT		= 0,	/*raw data is very small		     */
+    H5D_CONTIGUOUS	= 1,	/*the default				     */
+    H5D_CHUNKED		= 2,	/*slow and fancy			     */
+    H5D_NLAYOUTS	= 3	/*this one must be last!		     */
+} H5D_layout_t;
+
+/* Types of chunk index data structures */
+typedef enum H5D_chunk_index_t {
+    H5D_CHUNK_BTREE	= 0	/* v1 B-tree index			     */
+} H5D_chunk_index_t;
+
+/* Values for the space allocation time property */
+typedef enum H5D_alloc_time_t {
+    H5D_ALLOC_TIME_ERROR	= -1,
+    H5D_ALLOC_TIME_DEFAULT  	= 0,
+    H5D_ALLOC_TIME_EARLY	= 1,
+    H5D_ALLOC_TIME_LATE		= 2,
+    H5D_ALLOC_TIME_INCR		= 3
+} H5D_alloc_time_t;
+
+/* Values for the status of space allocation */
+typedef enum H5D_space_status_t {
+    H5D_SPACE_STATUS_ERROR		= -1,
+    H5D_SPACE_STATUS_NOT_ALLOCATED	= 0,
+    H5D_SPACE_STATUS_PART_ALLOCATED	= 1,
+    H5D_SPACE_STATUS_ALLOCATED		= 2
+} H5D_space_status_t;
+
+/* Values for time of writing fill value property */
+typedef enum H5D_fill_time_t {
+    H5D_FILL_TIME_ERROR	= -1,
+    H5D_FILL_TIME_ALLOC = 0,
+    H5D_FILL_TIME_NEVER	= 1,
+    H5D_FILL_TIME_IFSET	= 2
+} H5D_fill_time_t;
+
+/* Values for fill value status */
+typedef enum H5D_fill_value_t {
+    H5D_FILL_VALUE_ERROR        =-1,
+    H5D_FILL_VALUE_UNDEFINED    =0,
+    H5D_FILL_VALUE_DEFAULT      =1,
+    H5D_FILL_VALUE_USER_DEFINED =2
+} H5D_fill_value_t;
+
+/********************/
+/* Public Variables */
+/********************/
+
+/*********************/
+/* Public Prototypes */
+/*********************/
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Define the operator function pointer for H5Diterate() */
+typedef herr_t (*H5D_operator_t)(void *elem, hid_t type_id, unsigned ndim,
+				 const hsize_t *point, void *operator_data);
+
+/* Define the operator function pointer for H5Dscatter() */
+typedef herr_t (*H5D_scatter_func_t)(const void **src_buf/*out*/,
+                                     size_t *src_buf_bytes_used/*out*/,
+                                     void *op_data);
+
+/* Define the operator function pointer for H5Dgather() */
+typedef herr_t (*H5D_gather_func_t)(const void *dst_buf,
+                                    size_t dst_buf_bytes_used, void *op_data);
+
+H5_DLL hid_t H5Dcreate2(hid_t loc_id, const char *name, hid_t type_id,
+    hid_t space_id, hid_t lcpl_id, hid_t dcpl_id, hid_t dapl_id);
+H5_DLL hid_t H5Dcreate_anon(hid_t file_id, hid_t type_id, hid_t space_id,
+    hid_t plist_id, hid_t dapl_id);
+H5_DLL hid_t H5Dopen2(hid_t file_id, const char *name, hid_t dapl_id);
+H5_DLL herr_t H5Dclose(hid_t dset_id);
+H5_DLL hid_t H5Dget_space(hid_t dset_id);
+H5_DLL herr_t H5Dget_space_status(hid_t dset_id, H5D_space_status_t *allocation);
+H5_DLL hid_t H5Dget_type(hid_t dset_id);
+H5_DLL hid_t H5Dget_create_plist(hid_t dset_id);
+H5_DLL hid_t H5Dget_access_plist(hid_t dset_id);
+H5_DLL hsize_t H5Dget_storage_size(hid_t dset_id);
+H5_DLL haddr_t H5Dget_offset(hid_t dset_id);
+H5_DLL herr_t H5Dread(hid_t dset_id, hid_t mem_type_id, hid_t mem_space_id,
+			hid_t file_space_id, hid_t plist_id, void *buf/*out*/);
+H5_DLL herr_t H5Dwrite(hid_t dset_id, hid_t mem_type_id, hid_t mem_space_id,
+			 hid_t file_space_id, hid_t plist_id, const void *buf);
+H5_DLL herr_t H5Diterate(void *buf, hid_t type_id, hid_t space_id,
+            H5D_operator_t op, void *operator_data);
+H5_DLL herr_t H5Dvlen_reclaim(hid_t type_id, hid_t space_id, hid_t plist_id, void *buf);
+H5_DLL herr_t H5Dvlen_get_buf_size(hid_t dataset_id, hid_t type_id, hid_t space_id, hsize_t *size);
+H5_DLL herr_t H5Dfill(const void *fill, hid_t fill_type, void *buf,
+        hid_t buf_type, hid_t space);
+H5_DLL herr_t H5Dset_extent(hid_t dset_id, const hsize_t size[]);
+H5_DLL herr_t H5Dscatter(H5D_scatter_func_t op, void *op_data, hid_t type_id,
+    hid_t dst_space_id, void *dst_buf);
+H5_DLL herr_t H5Dgather(hid_t src_space_id, const void *src_buf, hid_t type_id,
+    size_t dst_buf_size, void *dst_buf, H5D_gather_func_t op, void *op_data);
+H5_DLL herr_t H5Ddebug(hid_t dset_id);
+
+/* Symbols defined for compatibility with previous versions of the HDF5 API.
+ *
+ * Use of these symbols is deprecated.
+ */
+#ifndef H5_NO_DEPRECATED_SYMBOLS
+
+/* Macros */
+
+
+/* Typedefs */
+
+
+/* Function prototypes */
+H5_DLL hid_t H5Dcreate1(hid_t file_id, const char *name, hid_t type_id,
+    hid_t space_id, hid_t dcpl_id);
+H5_DLL hid_t H5Dopen1(hid_t file_id, const char *name);
+H5_DLL herr_t H5Dextend(hid_t dset_id, const hsize_t size[]);
+
+#endif /* H5_NO_DEPRECATED_SYMBOLS */
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* _H5Dpublic_H */
+
diff --git a/privatemodules/nc4/include/H5Epubgen.h b/privatemodules/nc4/include/H5Epubgen.h
new file mode 100644
index 0000000000000000000000000000000000000000..75eca0b99f0149acc9ca5369426cd6c324f1decf
--- /dev/null
+++ b/privatemodules/nc4/include/H5Epubgen.h
@@ -0,0 +1,368 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/* Generated automatically by bin/make_err -- do not edit */
+/* Add new errors to H5err.txt file */
+
+
+#ifndef _H5Epubgen_H
+#define _H5Epubgen_H
+
+/*********************/
+/* Major error codes */
+/*********************/
+
+#define H5E_DATASET          (H5OPEN H5E_DATASET_g)
+#define H5E_FUNC             (H5OPEN H5E_FUNC_g)
+#define H5E_STORAGE          (H5OPEN H5E_STORAGE_g)
+#define H5E_FILE             (H5OPEN H5E_FILE_g)
+#define H5E_SOHM             (H5OPEN H5E_SOHM_g)
+#define H5E_SYM              (H5OPEN H5E_SYM_g)
+#define H5E_PLUGIN           (H5OPEN H5E_PLUGIN_g)
+#define H5E_VFL              (H5OPEN H5E_VFL_g)
+#define H5E_INTERNAL         (H5OPEN H5E_INTERNAL_g)
+#define H5E_BTREE            (H5OPEN H5E_BTREE_g)
+#define H5E_REFERENCE        (H5OPEN H5E_REFERENCE_g)
+#define H5E_DATASPACE        (H5OPEN H5E_DATASPACE_g)
+#define H5E_RESOURCE         (H5OPEN H5E_RESOURCE_g)
+#define H5E_PLIST            (H5OPEN H5E_PLIST_g)
+#define H5E_LINK             (H5OPEN H5E_LINK_g)
+#define H5E_DATATYPE         (H5OPEN H5E_DATATYPE_g)
+#define H5E_RS               (H5OPEN H5E_RS_g)
+#define H5E_HEAP             (H5OPEN H5E_HEAP_g)
+#define H5E_OHDR             (H5OPEN H5E_OHDR_g)
+#define H5E_ATOM             (H5OPEN H5E_ATOM_g)
+#define H5E_ATTR             (H5OPEN H5E_ATTR_g)
+#define H5E_NONE_MAJOR       (H5OPEN H5E_NONE_MAJOR_g)
+#define H5E_IO               (H5OPEN H5E_IO_g)
+#define H5E_SLIST            (H5OPEN H5E_SLIST_g)
+#define H5E_EFL              (H5OPEN H5E_EFL_g)
+#define H5E_TST              (H5OPEN H5E_TST_g)
+#define H5E_ARGS             (H5OPEN H5E_ARGS_g)
+#define H5E_ERROR            (H5OPEN H5E_ERROR_g)
+#define H5E_PLINE            (H5OPEN H5E_PLINE_g)
+#define H5E_FSPACE           (H5OPEN H5E_FSPACE_g)
+#define H5E_CACHE            (H5OPEN H5E_CACHE_g)
+H5_DLLVAR hid_t H5E_DATASET_g;       /* Dataset */
+H5_DLLVAR hid_t H5E_FUNC_g;          /* Function entry/exit */
+H5_DLLVAR hid_t H5E_STORAGE_g;       /* Data storage */
+H5_DLLVAR hid_t H5E_FILE_g;          /* File accessibilty */
+H5_DLLVAR hid_t H5E_SOHM_g;          /* Shared Object Header Messages */
+H5_DLLVAR hid_t H5E_SYM_g;           /* Symbol table */
+H5_DLLVAR hid_t H5E_PLUGIN_g;        /* Plugin for dynamically loaded library */
+H5_DLLVAR hid_t H5E_VFL_g;           /* Virtual File Layer */
+H5_DLLVAR hid_t H5E_INTERNAL_g;      /* Internal error (too specific to document in detail) */
+H5_DLLVAR hid_t H5E_BTREE_g;         /* B-Tree node */
+H5_DLLVAR hid_t H5E_REFERENCE_g;     /* References */
+H5_DLLVAR hid_t H5E_DATASPACE_g;     /* Dataspace */
+H5_DLLVAR hid_t H5E_RESOURCE_g;      /* Resource unavailable */
+H5_DLLVAR hid_t H5E_PLIST_g;         /* Property lists */
+H5_DLLVAR hid_t H5E_LINK_g;          /* Links */
+H5_DLLVAR hid_t H5E_DATATYPE_g;      /* Datatype */
+H5_DLLVAR hid_t H5E_RS_g;            /* Reference Counted Strings */
+H5_DLLVAR hid_t H5E_HEAP_g;          /* Heap */
+H5_DLLVAR hid_t H5E_OHDR_g;          /* Object header */
+H5_DLLVAR hid_t H5E_ATOM_g;          /* Object atom */
+H5_DLLVAR hid_t H5E_ATTR_g;          /* Attribute */
+H5_DLLVAR hid_t H5E_NONE_MAJOR_g;    /* No error */
+H5_DLLVAR hid_t H5E_IO_g;            /* Low-level I/O */
+H5_DLLVAR hid_t H5E_SLIST_g;         /* Skip Lists */
+H5_DLLVAR hid_t H5E_EFL_g;           /* External file list */
+H5_DLLVAR hid_t H5E_TST_g;           /* Ternary Search Trees */
+H5_DLLVAR hid_t H5E_ARGS_g;          /* Invalid arguments to routine */
+H5_DLLVAR hid_t H5E_ERROR_g;         /* Error API */
+H5_DLLVAR hid_t H5E_PLINE_g;         /* Data filters */
+H5_DLLVAR hid_t H5E_FSPACE_g;        /* Free Space Manager */
+H5_DLLVAR hid_t H5E_CACHE_g;         /* Object cache */
+
+/*********************/
+/* Minor error codes */
+/*********************/
+
+/* Generic low-level file I/O errors */
+#define H5E_SEEKERROR        (H5OPEN H5E_SEEKERROR_g)
+#define H5E_READERROR        (H5OPEN H5E_READERROR_g)
+#define H5E_WRITEERROR       (H5OPEN H5E_WRITEERROR_g)
+#define H5E_CLOSEERROR       (H5OPEN H5E_CLOSEERROR_g)
+#define H5E_OVERFLOW         (H5OPEN H5E_OVERFLOW_g)
+#define H5E_FCNTL            (H5OPEN H5E_FCNTL_g)
+H5_DLLVAR hid_t H5E_SEEKERROR_g;     /* Seek failed */
+H5_DLLVAR hid_t H5E_READERROR_g;     /* Read failed */
+H5_DLLVAR hid_t H5E_WRITEERROR_g;    /* Write failed */
+H5_DLLVAR hid_t H5E_CLOSEERROR_g;    /* Close failed */
+H5_DLLVAR hid_t H5E_OVERFLOW_g;      /* Address overflowed */
+H5_DLLVAR hid_t H5E_FCNTL_g;         /* File control (fcntl) failed */
+
+/* Resource errors */
+#define H5E_NOSPACE          (H5OPEN H5E_NOSPACE_g)
+#define H5E_CANTALLOC        (H5OPEN H5E_CANTALLOC_g)
+#define H5E_CANTCOPY         (H5OPEN H5E_CANTCOPY_g)
+#define H5E_CANTFREE         (H5OPEN H5E_CANTFREE_g)
+#define H5E_ALREADYEXISTS    (H5OPEN H5E_ALREADYEXISTS_g)
+#define H5E_CANTLOCK         (H5OPEN H5E_CANTLOCK_g)
+#define H5E_CANTUNLOCK       (H5OPEN H5E_CANTUNLOCK_g)
+#define H5E_CANTGC           (H5OPEN H5E_CANTGC_g)
+#define H5E_CANTGETSIZE      (H5OPEN H5E_CANTGETSIZE_g)
+#define H5E_OBJOPEN          (H5OPEN H5E_OBJOPEN_g)
+H5_DLLVAR hid_t H5E_NOSPACE_g;       /* No space available for allocation */
+H5_DLLVAR hid_t H5E_CANTALLOC_g;     /* Can't allocate space */
+H5_DLLVAR hid_t H5E_CANTCOPY_g;      /* Unable to copy object */
+H5_DLLVAR hid_t H5E_CANTFREE_g;      /* Unable to free object */
+H5_DLLVAR hid_t H5E_ALREADYEXISTS_g; /* Object already exists */
+H5_DLLVAR hid_t H5E_CANTLOCK_g;      /* Unable to lock object */
+H5_DLLVAR hid_t H5E_CANTUNLOCK_g;    /* Unable to unlock object */
+H5_DLLVAR hid_t H5E_CANTGC_g;        /* Unable to garbage collect */
+H5_DLLVAR hid_t H5E_CANTGETSIZE_g;   /* Unable to compute size */
+H5_DLLVAR hid_t H5E_OBJOPEN_g;       /* Object is already open */
+
+/* Heap errors */
+#define H5E_CANTRESTORE      (H5OPEN H5E_CANTRESTORE_g)
+#define H5E_CANTCOMPUTE      (H5OPEN H5E_CANTCOMPUTE_g)
+#define H5E_CANTEXTEND       (H5OPEN H5E_CANTEXTEND_g)
+#define H5E_CANTATTACH       (H5OPEN H5E_CANTATTACH_g)
+#define H5E_CANTUPDATE       (H5OPEN H5E_CANTUPDATE_g)
+#define H5E_CANTOPERATE      (H5OPEN H5E_CANTOPERATE_g)
+H5_DLLVAR hid_t H5E_CANTRESTORE_g;   /* Can't restore condition */
+H5_DLLVAR hid_t H5E_CANTCOMPUTE_g;   /* Can't compute value */
+H5_DLLVAR hid_t H5E_CANTEXTEND_g;    /* Can't extend heap's space */
+H5_DLLVAR hid_t H5E_CANTATTACH_g;    /* Can't attach object */
+H5_DLLVAR hid_t H5E_CANTUPDATE_g;    /* Can't update object */
+H5_DLLVAR hid_t H5E_CANTOPERATE_g;   /* Can't operate on object */
+
+/* Function entry/exit interface errors */
+#define H5E_CANTINIT         (H5OPEN H5E_CANTINIT_g)
+#define H5E_ALREADYINIT      (H5OPEN H5E_ALREADYINIT_g)
+#define H5E_CANTRELEASE      (H5OPEN H5E_CANTRELEASE_g)
+H5_DLLVAR hid_t H5E_CANTINIT_g;      /* Unable to initialize object */
+H5_DLLVAR hid_t H5E_ALREADYINIT_g;   /* Object already initialized */
+H5_DLLVAR hid_t H5E_CANTRELEASE_g;   /* Unable to release object */
+
+/* Property list errors */
+#define H5E_CANTGET          (H5OPEN H5E_CANTGET_g)
+#define H5E_CANTSET          (H5OPEN H5E_CANTSET_g)
+#define H5E_DUPCLASS         (H5OPEN H5E_DUPCLASS_g)
+#define H5E_SETDISALLOWED    (H5OPEN H5E_SETDISALLOWED_g)
+H5_DLLVAR hid_t H5E_CANTGET_g;       /* Can't get value */
+H5_DLLVAR hid_t H5E_CANTSET_g;       /* Can't set value */
+H5_DLLVAR hid_t H5E_DUPCLASS_g;      /* Duplicate class name in parent class */
+H5_DLLVAR hid_t H5E_SETDISALLOWED_g; /* Disallowed operation */
+
+/* Free space errors */
+#define H5E_CANTMERGE        (H5OPEN H5E_CANTMERGE_g)
+#define H5E_CANTREVIVE       (H5OPEN H5E_CANTREVIVE_g)
+#define H5E_CANTSHRINK       (H5OPEN H5E_CANTSHRINK_g)
+H5_DLLVAR hid_t H5E_CANTMERGE_g;     /* Can't merge objects */
+H5_DLLVAR hid_t H5E_CANTREVIVE_g;    /* Can't revive object */
+H5_DLLVAR hid_t H5E_CANTSHRINK_g;    /* Can't shrink container */
+
+/* Object header related errors */
+#define H5E_LINKCOUNT        (H5OPEN H5E_LINKCOUNT_g)
+#define H5E_VERSION          (H5OPEN H5E_VERSION_g)
+#define H5E_ALIGNMENT        (H5OPEN H5E_ALIGNMENT_g)
+#define H5E_BADMESG          (H5OPEN H5E_BADMESG_g)
+#define H5E_CANTDELETE       (H5OPEN H5E_CANTDELETE_g)
+#define H5E_BADITER          (H5OPEN H5E_BADITER_g)
+#define H5E_CANTPACK         (H5OPEN H5E_CANTPACK_g)
+#define H5E_CANTRESET        (H5OPEN H5E_CANTRESET_g)
+#define H5E_CANTRENAME       (H5OPEN H5E_CANTRENAME_g)
+H5_DLLVAR hid_t H5E_LINKCOUNT_g;     /* Bad object header link count */
+H5_DLLVAR hid_t H5E_VERSION_g;       /* Wrong version number */
+H5_DLLVAR hid_t H5E_ALIGNMENT_g;     /* Alignment error */
+H5_DLLVAR hid_t H5E_BADMESG_g;       /* Unrecognized message */
+H5_DLLVAR hid_t H5E_CANTDELETE_g;    /* Can't delete message */
+H5_DLLVAR hid_t H5E_BADITER_g;       /* Iteration failed */
+H5_DLLVAR hid_t H5E_CANTPACK_g;      /* Can't pack messages */
+H5_DLLVAR hid_t H5E_CANTRESET_g;     /* Can't reset object */
+H5_DLLVAR hid_t H5E_CANTRENAME_g;    /* Unable to rename object */
+
+/* System level errors */
+#define H5E_SYSERRSTR        (H5OPEN H5E_SYSERRSTR_g)
+H5_DLLVAR hid_t H5E_SYSERRSTR_g;     /* System error message */
+
+/* I/O pipeline errors */
+#define H5E_NOFILTER         (H5OPEN H5E_NOFILTER_g)
+#define H5E_CALLBACK         (H5OPEN H5E_CALLBACK_g)
+#define H5E_CANAPPLY         (H5OPEN H5E_CANAPPLY_g)
+#define H5E_SETLOCAL         (H5OPEN H5E_SETLOCAL_g)
+#define H5E_NOENCODER        (H5OPEN H5E_NOENCODER_g)
+#define H5E_CANTFILTER       (H5OPEN H5E_CANTFILTER_g)
+H5_DLLVAR hid_t H5E_NOFILTER_g;      /* Requested filter is not available */
+H5_DLLVAR hid_t H5E_CALLBACK_g;      /* Callback failed */
+H5_DLLVAR hid_t H5E_CANAPPLY_g;      /* Error from filter 'can apply' callback */
+H5_DLLVAR hid_t H5E_SETLOCAL_g;      /* Error from filter 'set local' callback */
+H5_DLLVAR hid_t H5E_NOENCODER_g;     /* Filter present but encoding disabled */
+H5_DLLVAR hid_t H5E_CANTFILTER_g;    /* Filter operation failed */
+
+/* Group related errors */
+#define H5E_CANTOPENOBJ      (H5OPEN H5E_CANTOPENOBJ_g)
+#define H5E_CANTCLOSEOBJ     (H5OPEN H5E_CANTCLOSEOBJ_g)
+#define H5E_COMPLEN          (H5OPEN H5E_COMPLEN_g)
+#define H5E_PATH             (H5OPEN H5E_PATH_g)
+H5_DLLVAR hid_t H5E_CANTOPENOBJ_g;   /* Can't open object */
+H5_DLLVAR hid_t H5E_CANTCLOSEOBJ_g;  /* Can't close object */
+H5_DLLVAR hid_t H5E_COMPLEN_g;       /* Name component is too long */
+H5_DLLVAR hid_t H5E_PATH_g;          /* Problem with path to object */
+
+/* No error */
+#define H5E_NONE_MINOR       (H5OPEN H5E_NONE_MINOR_g)
+H5_DLLVAR hid_t H5E_NONE_MINOR_g;    /* No error */
+
+/* Plugin errors */
+#define H5E_OPENERROR        (H5OPEN H5E_OPENERROR_g)
+H5_DLLVAR hid_t H5E_OPENERROR_g;     /* Can't open directory or file */
+
+/* File accessibilty errors */
+#define H5E_FILEEXISTS       (H5OPEN H5E_FILEEXISTS_g)
+#define H5E_FILEOPEN         (H5OPEN H5E_FILEOPEN_g)
+#define H5E_CANTCREATE       (H5OPEN H5E_CANTCREATE_g)
+#define H5E_CANTOPENFILE     (H5OPEN H5E_CANTOPENFILE_g)
+#define H5E_CANTCLOSEFILE    (H5OPEN H5E_CANTCLOSEFILE_g)
+#define H5E_NOTHDF5          (H5OPEN H5E_NOTHDF5_g)
+#define H5E_BADFILE          (H5OPEN H5E_BADFILE_g)
+#define H5E_TRUNCATED        (H5OPEN H5E_TRUNCATED_g)
+#define H5E_MOUNT            (H5OPEN H5E_MOUNT_g)
+H5_DLLVAR hid_t H5E_FILEEXISTS_g;    /* File already exists */
+H5_DLLVAR hid_t H5E_FILEOPEN_g;      /* File already open */
+H5_DLLVAR hid_t H5E_CANTCREATE_g;    /* Unable to create file */
+H5_DLLVAR hid_t H5E_CANTOPENFILE_g;  /* Unable to open file */
+H5_DLLVAR hid_t H5E_CANTCLOSEFILE_g; /* Unable to close file */
+H5_DLLVAR hid_t H5E_NOTHDF5_g;       /* Not an HDF5 file */
+H5_DLLVAR hid_t H5E_BADFILE_g;       /* Bad file ID accessed */
+H5_DLLVAR hid_t H5E_TRUNCATED_g;     /* File has been truncated */
+H5_DLLVAR hid_t H5E_MOUNT_g;         /* File mount error */
+
+/* Object atom related errors */
+#define H5E_BADATOM          (H5OPEN H5E_BADATOM_g)
+#define H5E_BADGROUP         (H5OPEN H5E_BADGROUP_g)
+#define H5E_CANTREGISTER     (H5OPEN H5E_CANTREGISTER_g)
+#define H5E_CANTINC          (H5OPEN H5E_CANTINC_g)
+#define H5E_CANTDEC          (H5OPEN H5E_CANTDEC_g)
+#define H5E_NOIDS            (H5OPEN H5E_NOIDS_g)
+H5_DLLVAR hid_t H5E_BADATOM_g;       /* Unable to find atom information (already closed?) */
+H5_DLLVAR hid_t H5E_BADGROUP_g;      /* Unable to find ID group information */
+H5_DLLVAR hid_t H5E_CANTREGISTER_g;  /* Unable to register new atom */
+H5_DLLVAR hid_t H5E_CANTINC_g;       /* Unable to increment reference count */
+H5_DLLVAR hid_t H5E_CANTDEC_g;       /* Unable to decrement reference count */
+H5_DLLVAR hid_t H5E_NOIDS_g;         /* Out of IDs for group */
+
+/* Cache related errors */
+#define H5E_CANTFLUSH        (H5OPEN H5E_CANTFLUSH_g)
+#define H5E_CANTSERIALIZE    (H5OPEN H5E_CANTSERIALIZE_g)
+#define H5E_CANTLOAD         (H5OPEN H5E_CANTLOAD_g)
+#define H5E_PROTECT          (H5OPEN H5E_PROTECT_g)
+#define H5E_NOTCACHED        (H5OPEN H5E_NOTCACHED_g)
+#define H5E_SYSTEM           (H5OPEN H5E_SYSTEM_g)
+#define H5E_CANTINS          (H5OPEN H5E_CANTINS_g)
+#define H5E_CANTPROTECT      (H5OPEN H5E_CANTPROTECT_g)
+#define H5E_CANTUNPROTECT    (H5OPEN H5E_CANTUNPROTECT_g)
+#define H5E_CANTPIN          (H5OPEN H5E_CANTPIN_g)
+#define H5E_CANTUNPIN        (H5OPEN H5E_CANTUNPIN_g)
+#define H5E_CANTMARKDIRTY    (H5OPEN H5E_CANTMARKDIRTY_g)
+#define H5E_CANTDIRTY        (H5OPEN H5E_CANTDIRTY_g)
+#define H5E_CANTEXPUNGE      (H5OPEN H5E_CANTEXPUNGE_g)
+#define H5E_CANTRESIZE       (H5OPEN H5E_CANTRESIZE_g)
+H5_DLLVAR hid_t H5E_CANTFLUSH_g;     /* Unable to flush data from cache */
+H5_DLLVAR hid_t H5E_CANTSERIALIZE_g; /* Unable to serialize data from cache */
+H5_DLLVAR hid_t H5E_CANTLOAD_g;      /* Unable to load metadata into cache */
+H5_DLLVAR hid_t H5E_PROTECT_g;       /* Protected metadata error */
+H5_DLLVAR hid_t H5E_NOTCACHED_g;     /* Metadata not currently cached */
+H5_DLLVAR hid_t H5E_SYSTEM_g;        /* Internal error detected */
+H5_DLLVAR hid_t H5E_CANTINS_g;       /* Unable to insert metadata into cache */
+H5_DLLVAR hid_t H5E_CANTPROTECT_g;   /* Unable to protect metadata */
+H5_DLLVAR hid_t H5E_CANTUNPROTECT_g; /* Unable to unprotect metadata */
+H5_DLLVAR hid_t H5E_CANTPIN_g;       /* Unable to pin cache entry */
+H5_DLLVAR hid_t H5E_CANTUNPIN_g;     /* Unable to un-pin cache entry */
+H5_DLLVAR hid_t H5E_CANTMARKDIRTY_g; /* Unable to mark a pinned entry as dirty */
+H5_DLLVAR hid_t H5E_CANTDIRTY_g;     /* Unable to mark metadata as dirty */
+H5_DLLVAR hid_t H5E_CANTEXPUNGE_g;   /* Unable to expunge a metadata cache entry */
+H5_DLLVAR hid_t H5E_CANTRESIZE_g;    /* Unable to resize a metadata cache entry */
+
+/* Link related errors */
+#define H5E_TRAVERSE         (H5OPEN H5E_TRAVERSE_g)
+#define H5E_NLINKS           (H5OPEN H5E_NLINKS_g)
+#define H5E_NOTREGISTERED    (H5OPEN H5E_NOTREGISTERED_g)
+#define H5E_CANTMOVE         (H5OPEN H5E_CANTMOVE_g)
+#define H5E_CANTSORT         (H5OPEN H5E_CANTSORT_g)
+H5_DLLVAR hid_t H5E_TRAVERSE_g;      /* Link traversal failure */
+H5_DLLVAR hid_t H5E_NLINKS_g;        /* Too many soft links in path */
+H5_DLLVAR hid_t H5E_NOTREGISTERED_g; /* Link class not registered */
+H5_DLLVAR hid_t H5E_CANTMOVE_g;      /* Can't move object */
+H5_DLLVAR hid_t H5E_CANTSORT_g;      /* Can't sort objects */
+
+/* Parallel MPI errors */
+#define H5E_MPI              (H5OPEN H5E_MPI_g)
+#define H5E_MPIERRSTR        (H5OPEN H5E_MPIERRSTR_g)
+#define H5E_CANTRECV         (H5OPEN H5E_CANTRECV_g)
+H5_DLLVAR hid_t H5E_MPI_g;           /* Some MPI function failed */
+H5_DLLVAR hid_t H5E_MPIERRSTR_g;     /* MPI Error String */
+H5_DLLVAR hid_t H5E_CANTRECV_g;      /* Can't receive data */
+
+/* Dataspace errors */
+#define H5E_CANTCLIP         (H5OPEN H5E_CANTCLIP_g)
+#define H5E_CANTCOUNT        (H5OPEN H5E_CANTCOUNT_g)
+#define H5E_CANTSELECT       (H5OPEN H5E_CANTSELECT_g)
+#define H5E_CANTNEXT         (H5OPEN H5E_CANTNEXT_g)
+#define H5E_BADSELECT        (H5OPEN H5E_BADSELECT_g)
+#define H5E_CANTCOMPARE      (H5OPEN H5E_CANTCOMPARE_g)
+H5_DLLVAR hid_t H5E_CANTCLIP_g;      /* Can't clip hyperslab region */
+H5_DLLVAR hid_t H5E_CANTCOUNT_g;     /* Can't count elements */
+H5_DLLVAR hid_t H5E_CANTSELECT_g;    /* Can't select hyperslab */
+H5_DLLVAR hid_t H5E_CANTNEXT_g;      /* Can't move to next iterator location */
+H5_DLLVAR hid_t H5E_BADSELECT_g;     /* Invalid selection */
+H5_DLLVAR hid_t H5E_CANTCOMPARE_g;   /* Can't compare objects */
+
+/* Argument errors */
+#define H5E_UNINITIALIZED    (H5OPEN H5E_UNINITIALIZED_g)
+#define H5E_UNSUPPORTED      (H5OPEN H5E_UNSUPPORTED_g)
+#define H5E_BADTYPE          (H5OPEN H5E_BADTYPE_g)
+#define H5E_BADRANGE         (H5OPEN H5E_BADRANGE_g)
+#define H5E_BADVALUE         (H5OPEN H5E_BADVALUE_g)
+H5_DLLVAR hid_t H5E_UNINITIALIZED_g; /* Information is uinitialized */
+H5_DLLVAR hid_t H5E_UNSUPPORTED_g;   /* Feature is unsupported */
+H5_DLLVAR hid_t H5E_BADTYPE_g;       /* Inappropriate type */
+H5_DLLVAR hid_t H5E_BADRANGE_g;      /* Out of range */
+H5_DLLVAR hid_t H5E_BADVALUE_g;      /* Bad value */
+
+/* B-tree related errors */
+#define H5E_NOTFOUND         (H5OPEN H5E_NOTFOUND_g)
+#define H5E_EXISTS           (H5OPEN H5E_EXISTS_g)
+#define H5E_CANTENCODE       (H5OPEN H5E_CANTENCODE_g)
+#define H5E_CANTDECODE       (H5OPEN H5E_CANTDECODE_g)
+#define H5E_CANTSPLIT        (H5OPEN H5E_CANTSPLIT_g)
+#define H5E_CANTREDISTRIBUTE (H5OPEN H5E_CANTREDISTRIBUTE_g)
+#define H5E_CANTSWAP         (H5OPEN H5E_CANTSWAP_g)
+#define H5E_CANTINSERT       (H5OPEN H5E_CANTINSERT_g)
+#define H5E_CANTLIST         (H5OPEN H5E_CANTLIST_g)
+#define H5E_CANTMODIFY       (H5OPEN H5E_CANTMODIFY_g)
+#define H5E_CANTREMOVE       (H5OPEN H5E_CANTREMOVE_g)
+H5_DLLVAR hid_t H5E_NOTFOUND_g;      /* Object not found */
+H5_DLLVAR hid_t H5E_EXISTS_g;        /* Object already exists */
+H5_DLLVAR hid_t H5E_CANTENCODE_g;    /* Unable to encode value */
+H5_DLLVAR hid_t H5E_CANTDECODE_g;    /* Unable to decode value */
+H5_DLLVAR hid_t H5E_CANTSPLIT_g;     /* Unable to split node */
+H5_DLLVAR hid_t H5E_CANTREDISTRIBUTE_g; /* Unable to redistribute records */
+H5_DLLVAR hid_t H5E_CANTSWAP_g;      /* Unable to swap records */
+H5_DLLVAR hid_t H5E_CANTINSERT_g;    /* Unable to insert object */
+H5_DLLVAR hid_t H5E_CANTLIST_g;      /* Unable to list node */
+H5_DLLVAR hid_t H5E_CANTMODIFY_g;    /* Unable to modify record */
+H5_DLLVAR hid_t H5E_CANTREMOVE_g;    /* Unable to remove object */
+
+/* Datatype conversion errors */
+#define H5E_CANTCONVERT      (H5OPEN H5E_CANTCONVERT_g)
+#define H5E_BADSIZE          (H5OPEN H5E_BADSIZE_g)
+H5_DLLVAR hid_t H5E_CANTCONVERT_g;   /* Can't convert datatypes */
+H5_DLLVAR hid_t H5E_BADSIZE_g;       /* Bad size for object */
+
+#endif /* H5Epubgen_H */
diff --git a/privatemodules/nc4/include/H5Epublic.h b/privatemodules/nc4/include/H5Epublic.h
new file mode 100644
index 0000000000000000000000000000000000000000..932b8574b7e473e43fd4111ddcc3086b03234bd5
--- /dev/null
+++ b/privatemodules/nc4/include/H5Epublic.h
@@ -0,0 +1,228 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * This file contains public declarations for the H5E module.
+ */
+#ifndef _H5Epublic_H
+#define _H5Epublic_H
+
+#include <stdio.h>              /*FILE arg of H5Eprint()                     */
+
+/* Public headers needed by this file */
+#include "H5public.h"
+#include "H5Ipublic.h"
+
+/* Value for the default error stack */
+#define H5E_DEFAULT             0
+
+/* Different kinds of error information */
+typedef enum H5E_type_t {
+    H5E_MAJOR,
+    H5E_MINOR
+} H5E_type_t;
+
+/* Information about an error; element of error stack */
+typedef struct H5E_error2_t {
+    hid_t       cls_id;         /*class ID                           */
+    hid_t       maj_num;	/*major error ID		     */
+    hid_t       min_num;	/*minor error number		     */
+    unsigned	line;		/*line in file where error occurs    */
+    const char	*func_name;   	/*function in which error occurred   */
+    const char	*file_name;	/*file in which error occurred       */
+    const char	*desc;		/*optional supplied description      */
+} H5E_error2_t;
+
+/* When this header is included from a private header, don't make calls to H5open() */
+#undef H5OPEN
+#ifndef _H5private_H
+#define H5OPEN          H5open(),
+#else   /* _H5private_H */
+#define H5OPEN
+#endif  /* _H5private_H */
+
+/* HDF5 error class */
+#define H5E_ERR_CLS		(H5OPEN H5E_ERR_CLS_g)
+H5_DLLVAR hid_t H5E_ERR_CLS_g;
+
+/* Include the automatically generated public header information */
+/* (This includes the list of major and minor error codes for the library) */
+#include "H5Epubgen.h"
+
+/*
+ * One often needs to temporarily disable automatic error reporting when
+ * trying something that's likely or expected to fail.  The code to try can
+ * be nested between calls to H5Eget_auto() and H5Eset_auto(), but it's
+ * easier just to use this macro like:
+ * 	H5E_BEGIN_TRY {
+ *	    ...stuff here that's likely to fail...
+ *      } H5E_END_TRY;
+ *
+ * Warning: don't break, return, or longjmp() from the body of the loop or
+ *	    the error reporting won't be properly restored!
+ *
+ * These two macros still use the old API functions for backward compatibility
+ * purpose.
+ */
+#ifndef H5_NO_DEPRECATED_SYMBOLS
+#define H5E_BEGIN_TRY {							      \
+    unsigned H5E_saved_is_v2;					              \
+    union {								      \
+        H5E_auto1_t efunc1;						      \
+        H5E_auto2_t efunc2;					              \
+    } H5E_saved;							      \
+    void *H5E_saved_edata;						      \
+								    	      \
+    (void)H5Eauto_is_v2(H5E_DEFAULT, &H5E_saved_is_v2);		              \
+    if(H5E_saved_is_v2) {						      \
+        (void)H5Eget_auto2(H5E_DEFAULT, &H5E_saved.efunc2, &H5E_saved_edata); \
+        (void)H5Eset_auto2(H5E_DEFAULT, NULL, NULL);		              \
+    } else {								      \
+        (void)H5Eget_auto1(&H5E_saved.efunc1, &H5E_saved_edata);		      \
+        (void)H5Eset_auto1(NULL, NULL);					      \
+    }
+
+#define H5E_END_TRY							      \
+    if(H5E_saved_is_v2)							      \
+        (void)H5Eset_auto2(H5E_DEFAULT, H5E_saved.efunc2, H5E_saved_edata);   \
+    else								      \
+        (void)H5Eset_auto1(H5E_saved.efunc1, H5E_saved_edata);		      \
+}
+#else /* H5_NO_DEPRECATED_SYMBOLS */
+#define H5E_BEGIN_TRY {							      \
+    H5E_auto_t saved_efunc;						      \
+    void *H5E_saved_edata;						      \
+								    	      \
+    (void)H5Eget_auto(H5E_DEFAULT, &saved_efunc, &H5E_saved_edata);	      \
+    (void)H5Eset_auto(H5E_DEFAULT, NULL, NULL);
+
+#define H5E_END_TRY							      \
+    (void)H5Eset_auto(H5E_DEFAULT, saved_efunc, H5E_saved_edata);	      \
+}
+#endif /* H5_NO_DEPRECATED_SYMBOLS */
+
+/*
+ * Public API Convenience Macros for Error reporting - Documented
+ */
+/* Use the Standard C __FILE__ & __LINE__ macros instead of typing them in */
+#define H5Epush_sim(func, cls, maj, min, str) H5Epush2(H5E_DEFAULT, __FILE__, func, __LINE__, cls, maj, min, str)
+
+/*
+ * Public API Convenience Macros for Error reporting - Undocumented
+ */
+/* Use the Standard C __FILE__ & __LINE__ macros instead of typing them in */
+/*  And return after pushing error onto stack */
+#define H5Epush_ret(func, cls, maj, min, str, ret) {			      \
+    H5Epush2(H5E_DEFAULT, __FILE__, func, __LINE__, cls, maj, min, str);      \
+    return(ret);							      \
+}
+
+/* Use the Standard C __FILE__ & __LINE__ macros instead of typing them in
+ * And goto a label after pushing error onto stack.
+ */
+#define H5Epush_goto(func, cls, maj, min, str, label) {			      \
+    H5Epush2(H5E_DEFAULT, __FILE__, func, __LINE__, cls, maj, min, str);      \
+    goto label;								      \
+}
+
+/* Error stack traversal direction */
+typedef enum H5E_direction_t {
+    H5E_WALK_UPWARD	= 0,		/*begin deep, end at API function    */
+    H5E_WALK_DOWNWARD	= 1		/*begin at API function, end deep    */
+} H5E_direction_t;
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Error stack traversal callback function pointers */
+typedef herr_t (*H5E_walk2_t)(unsigned n, const H5E_error2_t *err_desc,
+    void *client_data);
+typedef herr_t (*H5E_auto2_t)(hid_t estack, void *client_data);
+
+/* Public API functions */
+H5_DLL hid_t  H5Eregister_class(const char *cls_name, const char *lib_name,
+    const char *version);
+H5_DLL herr_t H5Eunregister_class(hid_t class_id);
+H5_DLL herr_t H5Eclose_msg(hid_t err_id);
+H5_DLL hid_t  H5Ecreate_msg(hid_t cls, H5E_type_t msg_type, const char *msg);
+H5_DLL hid_t  H5Ecreate_stack(void);
+H5_DLL hid_t  H5Eget_current_stack(void);
+H5_DLL herr_t H5Eclose_stack(hid_t stack_id);
+H5_DLL ssize_t H5Eget_class_name(hid_t class_id, char *name, size_t size);
+H5_DLL herr_t H5Eset_current_stack(hid_t err_stack_id);
+H5_DLL herr_t H5Epush2(hid_t err_stack, const char *file, const char *func, unsigned line,
+    hid_t cls_id, hid_t maj_id, hid_t min_id, const char *msg, ...);
+H5_DLL herr_t H5Epop(hid_t err_stack, size_t count);
+H5_DLL herr_t H5Eprint2(hid_t err_stack, FILE *stream);
+H5_DLL herr_t H5Ewalk2(hid_t err_stack, H5E_direction_t direction, H5E_walk2_t func,
+    void *client_data);
+H5_DLL herr_t H5Eget_auto2(hid_t estack_id, H5E_auto2_t *func, void **client_data);
+H5_DLL herr_t H5Eset_auto2(hid_t estack_id, H5E_auto2_t func, void *client_data);
+H5_DLL herr_t H5Eclear2(hid_t err_stack);
+H5_DLL herr_t H5Eauto_is_v2(hid_t err_stack, unsigned *is_stack);
+H5_DLL ssize_t H5Eget_msg(hid_t msg_id, H5E_type_t *type, char *msg,
+    size_t size);
+H5_DLL ssize_t H5Eget_num(hid_t error_stack_id);
+
+
+/* Symbols defined for compatibility with previous versions of the HDF5 API.
+ *
+ * Use of these symbols is deprecated.
+ */
+#ifndef H5_NO_DEPRECATED_SYMBOLS
+
+/* Typedefs */
+
+/* Alias major & minor error types to hid_t's, for compatibility with new
+ *      error API in v1.8
+ */
+typedef hid_t   H5E_major_t;
+typedef hid_t   H5E_minor_t;
+
+/* Information about an error element of error stack. */
+typedef struct H5E_error1_t {
+    H5E_major_t maj_num;                /*major error number                 */
+    H5E_minor_t min_num;                /*minor error number                 */
+    const char  *func_name;             /*function in which error occurred   */
+    const char  *file_name;             /*file in which error occurred       */
+    unsigned    line;                   /*line in file where error occurs    */
+    const char  *desc;                  /*optional supplied description      */
+} H5E_error1_t;
+
+/* Error stack traversal callback function pointers */
+typedef herr_t (*H5E_walk1_t)(int n, H5E_error1_t *err_desc, void *client_data);
+typedef herr_t (*H5E_auto1_t)(void *client_data);
+
+/* Function prototypes */
+H5_DLL herr_t H5Eclear1(void);
+H5_DLL herr_t H5Eget_auto1(H5E_auto1_t *func, void **client_data);
+H5_DLL herr_t H5Epush1(const char *file, const char *func, unsigned line,
+    H5E_major_t maj, H5E_minor_t min, const char *str);
+H5_DLL herr_t H5Eprint1(FILE *stream);
+H5_DLL herr_t H5Eset_auto1(H5E_auto1_t func, void *client_data);
+H5_DLL herr_t H5Ewalk1(H5E_direction_t direction, H5E_walk1_t func,
+    void *client_data);
+H5_DLL char *H5Eget_major(H5E_major_t maj);
+H5_DLL char *H5Eget_minor(H5E_minor_t min);
+#endif /* H5_NO_DEPRECATED_SYMBOLS */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* end _H5Epublic_H */
+
diff --git a/privatemodules/nc4/include/H5FDcore.h b/privatemodules/nc4/include/H5FDcore.h
new file mode 100644
index 0000000000000000000000000000000000000000..dca110ea20826e9a7c23f286d1153a4aed69b26b
--- /dev/null
+++ b/privatemodules/nc4/include/H5FDcore.h
@@ -0,0 +1,42 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Robb Matzke <matzke@llnl.gov>
+ *              Monday, August  2, 1999
+ *
+ * Purpose:	The public header file for the sec2 driver.
+ */
+#ifndef H5FDcore_H
+#define H5FDcore_H
+
+#include "H5Ipublic.h"
+
+#define H5FD_CORE	(H5FD_core_init())
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+H5_DLL hid_t H5FD_core_init(void);
+H5_DLL void H5FD_core_term(void);
+H5_DLL herr_t H5Pset_fapl_core(hid_t fapl_id, size_t increment,
+				hbool_t backing_store);
+H5_DLL herr_t H5Pget_fapl_core(hid_t fapl_id, size_t *increment/*out*/,
+				hbool_t *backing_store/*out*/);
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/privatemodules/nc4/include/H5FDdirect.h b/privatemodules/nc4/include/H5FDdirect.h
new file mode 100644
index 0000000000000000000000000000000000000000..26c70f30fa09a5077c4dffcb78faf500e30a3dc6
--- /dev/null
+++ b/privatemodules/nc4/include/H5FDdirect.h
@@ -0,0 +1,57 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Raymond Lu <slu@hdfgroup.uiuc.edu>
+ *              Wednesday, 20 September 2006
+ *
+ * Purpose:	The public header file for the direct driver.
+ */
+#ifndef H5FDdirect_H
+#define H5FDdirect_H
+
+#include "H5Ipublic.h"
+
+#ifdef H5_HAVE_DIRECT
+#       define H5FD_DIRECT	(H5FD_direct_init())
+#else
+#       define H5FD_DIRECT      (-1)
+#endif /* H5_HAVE_DIRECT */
+
+#ifdef H5_HAVE_DIRECT
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Default values for memory boundary, file block size, and maximal copy buffer size.
+ * Application can set these values through the function H5Pset_fapl_direct. */
+#define MBOUNDARY_DEF		4096
+#define FBSIZE_DEF		4096
+#define CBSIZE_DEF		16*1024*1024
+
+H5_DLL hid_t H5FD_direct_init(void);
+H5_DLL void H5FD_direct_term(void);
+H5_DLL herr_t H5Pset_fapl_direct(hid_t fapl_id, size_t alignment, size_t block_size,
+			size_t cbuf_size);
+H5_DLL herr_t H5Pget_fapl_direct(hid_t fapl_id, size_t *boundary/*out*/,
+			size_t *block_size/*out*/, size_t *cbuf_size/*out*/);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* H5_HAVE_DIRECT */
+
+#endif
diff --git a/privatemodules/nc4/include/H5FDfamily.h b/privatemodules/nc4/include/H5FDfamily.h
new file mode 100644
index 0000000000000000000000000000000000000000..dcb63e647e16d7083e4645f316d16479aad3d923
--- /dev/null
+++ b/privatemodules/nc4/include/H5FDfamily.h
@@ -0,0 +1,44 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Robb Matzke <matzke@llnl.gov>
+ *              Monday, August  4, 1999
+ *
+ * Purpose:	The public header file for the family driver.
+ */
+#ifndef H5FDfamily_H
+#define H5FDfamily_H
+
+#include "H5Ipublic.h"
+
+#define H5FD_FAMILY	(H5FD_family_init())
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+H5_DLL hid_t H5FD_family_init(void);
+H5_DLL void H5FD_family_term(void);
+H5_DLL herr_t H5Pset_fapl_family(hid_t fapl_id, hsize_t memb_size,
+			  hid_t memb_fapl_id);
+H5_DLL herr_t H5Pget_fapl_family(hid_t fapl_id, hsize_t *memb_size/*out*/,
+			  hid_t *memb_fapl_id/*out*/);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/privatemodules/nc4/include/H5FDlog.h b/privatemodules/nc4/include/H5FDlog.h
new file mode 100644
index 0000000000000000000000000000000000000000..ffc4df1a56ce0a55fadd5b94f36995a291dc0a23
--- /dev/null
+++ b/privatemodules/nc4/include/H5FDlog.h
@@ -0,0 +1,72 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Quincey Koziol <koziol@ncsa.uiuc.edu>
+ *              Monday, April 17, 2000
+ *
+ * Purpose:	The public header file for the log driver.
+ */
+#ifndef H5FDlog_H
+#define H5FDlog_H
+
+#include "H5Ipublic.h"
+
+#define H5FD_LOG	(H5FD_log_init())
+
+/* Flags for H5Pset_fapl_log() */
+/* Flags for tracking where reads/writes/seeks occur */
+#define H5FD_LOG_LOC_READ   0x00000001
+#define H5FD_LOG_LOC_WRITE  0x00000002
+#define H5FD_LOG_LOC_SEEK   0x00000004
+#define H5FD_LOG_LOC_IO     (H5FD_LOG_LOC_READ|H5FD_LOG_LOC_WRITE|H5FD_LOG_LOC_SEEK)
+/* Flags for tracking number of times each byte is read/written */
+#define H5FD_LOG_FILE_READ  0x00000008
+#define H5FD_LOG_FILE_WRITE 0x00000010
+#define H5FD_LOG_FILE_IO    (H5FD_LOG_FILE_READ|H5FD_LOG_FILE_WRITE)
+/* Flag for tracking "flavor" (type) of information stored at each byte */
+#define H5FD_LOG_FLAVOR     0x00000020
+/* Flags for tracking total number of reads/writes/seeks/truncates */
+#define H5FD_LOG_NUM_READ   0x00000040
+#define H5FD_LOG_NUM_WRITE  0x00000080
+#define H5FD_LOG_NUM_SEEK   0x00000100
+#define H5FD_LOG_NUM_TRUNCATE 0x00000200
+#define H5FD_LOG_NUM_IO     (H5FD_LOG_NUM_READ|H5FD_LOG_NUM_WRITE|H5FD_LOG_NUM_SEEK|H5FD_LOG_NUM_TRUNCATE)
+/* Flags for tracking time spent in open/stat/read/write/seek/close */
+#define H5FD_LOG_TIME_OPEN  0x00000400
+#define H5FD_LOG_TIME_STAT  0x00000800
+#define H5FD_LOG_TIME_READ  0x00001000
+#define H5FD_LOG_TIME_WRITE 0x00002000
+#define H5FD_LOG_TIME_SEEK  0x00004000
+#define H5FD_LOG_TIME_CLOSE 0x00008000
+#define H5FD_LOG_TIME_IO    (H5FD_LOG_TIME_OPEN|H5FD_LOG_TIME_STAT|H5FD_LOG_TIME_READ|H5FD_LOG_TIME_WRITE|H5FD_LOG_TIME_SEEK|H5FD_LOG_TIME_CLOSE)
+/* Flag for tracking allocation of space in file */
+#define H5FD_LOG_ALLOC      0x00010000
+#define H5FD_LOG_ALL        (H5FD_LOG_ALLOC|H5FD_LOG_TIME_IO|H5FD_LOG_NUM_IO|H5FD_LOG_FLAVOR|H5FD_LOG_FILE_IO|H5FD_LOG_LOC_IO)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+H5_DLL hid_t H5FD_log_init(void);
+H5_DLL void H5FD_log_term(void);
+H5_DLL herr_t H5Pset_fapl_log(hid_t fapl_id, const char *logfile, unsigned long long flags, size_t buf_size);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
diff --git a/privatemodules/nc4/include/H5FDmpi.h b/privatemodules/nc4/include/H5FDmpi.h
new file mode 100644
index 0000000000000000000000000000000000000000..784fe70c0568c2ec8e662a327f6299a6727c96c0
--- /dev/null
+++ b/privatemodules/nc4/include/H5FDmpi.h
@@ -0,0 +1,62 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Quincey Koziol <koziol@ncsa.uiuc.edu>
+ *              Friday, January 30, 2004
+ *
+ * Purpose:	The public header file for common items for all MPI VFL drivers
+ */
+#ifndef H5FDmpi_H
+#define H5FDmpi_H
+
+/***** Macros for One linked collective IO case. *****/
+/* The default value to do one linked collective IO for all chunks.
+   If the average number of chunks per process is greater than this value,
+      the library will create an MPI derived datatype to link all chunks to do collective IO.
+      The user can set this value through an API. */
+
+#define H5D_ONE_LINK_CHUNK_IO_THRESHOLD 0
+/***** Macros for multi-chunk collective IO case. *****/
+/* The default value of the threshold to do collective IO for this chunk.
+   If the average percentage of processes per chunk is greater than the default value,
+   collective IO is done for this chunk.
+*/
+
+#define H5D_MULTI_CHUNK_IO_COL_THRESHOLD 60
+/* Type of I/O for data transfer properties */
+typedef enum H5FD_mpio_xfer_t {
+    H5FD_MPIO_INDEPENDENT = 0, 		/*zero is the default*/
+    H5FD_MPIO_COLLECTIVE
+} H5FD_mpio_xfer_t;
+
+/* Type of chunked dataset I/O */
+typedef enum H5FD_mpio_chunk_opt_t {
+    H5FD_MPIO_CHUNK_DEFAULT = 0,
+    H5FD_MPIO_CHUNK_ONE_IO,  		/*zero is the default*/
+    H5FD_MPIO_CHUNK_MULTI_IO
+} H5FD_mpio_chunk_opt_t;
+
+/* Type of collective I/O */
+typedef enum H5FD_mpio_collective_opt_t {
+    H5FD_MPIO_COLLECTIVE_IO = 0,
+    H5FD_MPIO_INDIVIDUAL_IO  		/*zero is the default*/
+} H5FD_mpio_collective_opt_t;
+
+/* Include all the MPI VFL headers */
+#include "H5FDmpio.h"           /* MPI I/O file driver			*/
+
+#endif /* H5FDmpi_H */
+
diff --git a/privatemodules/nc4/include/H5FDmpio.h b/privatemodules/nc4/include/H5FDmpio.h
new file mode 100644
index 0000000000000000000000000000000000000000..1d91cc32cb45bde9abc4c4248724f92617aa218c
--- /dev/null
+++ b/privatemodules/nc4/include/H5FDmpio.h
@@ -0,0 +1,66 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Robb Matzke <matzke@llnl.gov>
+ *              Monday, August  2, 1999
+ *
+ * Purpose:	The public header file for the mpio driver.
+ */
+#ifndef H5FDmpio_H
+#define H5FDmpio_H
+
+/* Macros */
+
+#ifdef H5_HAVE_PARALLEL
+#   define H5FD_MPIO	(H5FD_mpio_init())
+#else
+#   define H5FD_MPIO	(-1)
+#endif /* H5_HAVE_PARALLEL */
+
+#ifdef H5_HAVE_PARALLEL
+/*Turn on H5FDmpio_debug if H5F_DEBUG is on */
+#ifdef H5F_DEBUG
+#ifndef H5FDmpio_DEBUG
+#define H5FDmpio_DEBUG
+#endif
+#endif
+
+/* Global var whose value comes from environment variable */
+/* (Defined in H5FDmpio.c) */
+H5_DLLVAR hbool_t H5FD_mpi_opt_types_g;
+
+/* Function prototypes */
+#ifdef __cplusplus
+extern "C" {
+#endif
+H5_DLL hid_t H5FD_mpio_init(void);
+H5_DLL void H5FD_mpio_term(void);
+H5_DLL herr_t H5Pset_fapl_mpio(hid_t fapl_id, MPI_Comm comm, MPI_Info info);
+H5_DLL herr_t H5Pget_fapl_mpio(hid_t fapl_id, MPI_Comm *comm/*out*/,
+			MPI_Info *info/*out*/);
+H5_DLL herr_t H5Pset_dxpl_mpio(hid_t dxpl_id, H5FD_mpio_xfer_t xfer_mode);
+H5_DLL herr_t H5Pget_dxpl_mpio(hid_t dxpl_id, H5FD_mpio_xfer_t *xfer_mode/*out*/);
+H5_DLL herr_t H5Pset_dxpl_mpio_collective_opt(hid_t dxpl_id, H5FD_mpio_collective_opt_t opt_mode);
+H5_DLL herr_t H5Pset_dxpl_mpio_chunk_opt(hid_t dxpl_id, H5FD_mpio_chunk_opt_t opt_mode);
+H5_DLL herr_t H5Pset_dxpl_mpio_chunk_opt_num(hid_t dxpl_id, unsigned num_chunk_per_proc);
+H5_DLL herr_t H5Pset_dxpl_mpio_chunk_opt_ratio(hid_t dxpl_id, unsigned percent_num_proc_per_chunk);
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* H5_HAVE_PARALLEL */
+
+#endif
diff --git a/privatemodules/nc4/include/H5FDmulti.h b/privatemodules/nc4/include/H5FDmulti.h
new file mode 100644
index 0000000000000000000000000000000000000000..b45a02957004a98a13c5133e022aa859ba2863e3
--- /dev/null
+++ b/privatemodules/nc4/include/H5FDmulti.h
@@ -0,0 +1,49 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Robb Matzke <matzke@llnl.gov>
+ *              Monday, August  2, 1999
+ *
+ * Purpose:	The public header file for the "multi" driver.
+ */
+#ifndef H5FDmulti_H
+#define H5FDmulti_H
+
+#include "H5Ipublic.h"
+#include "H5Ppublic.h"             /* Property lists */
+#include "H5Fpublic.h"
+
+#define H5FD_MULTI	(H5FD_multi_init())
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+H5_DLL hid_t H5FD_multi_init(void);
+H5_DLL void H5FD_multi_term(void);
+H5_DLL herr_t H5Pset_fapl_multi(hid_t fapl_id, const H5FD_mem_t *memb_map,
+			 const hid_t *memb_fapl, const char * const *memb_name,
+			 const haddr_t *memb_addr, hbool_t relax);
+H5_DLL herr_t H5Pget_fapl_multi(hid_t fapl_id, H5FD_mem_t *memb_map/*out*/,
+			 hid_t *memb_fapl/*out*/, char **memb_name/*out*/,
+			 haddr_t *memb_addr/*out*/, hbool_t *relax/*out*/);
+H5_DLL herr_t H5Pset_fapl_split(hid_t fapl, const char *meta_ext,
+			 hid_t meta_plist_id, const char *raw_ext,
+			 hid_t raw_plist_id);
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/privatemodules/nc4/include/H5FDpublic.h b/privatemodules/nc4/include/H5FDpublic.h
new file mode 100644
index 0000000000000000000000000000000000000000..f1b3920fb6a324db00aa51fced31a50e84553af6
--- /dev/null
+++ b/privatemodules/nc4/include/H5FDpublic.h
@@ -0,0 +1,318 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Robb Matzke <matzke@llnl.gov>
+ *              Monday, July 26, 1999
+ */
+#ifndef _H5FDpublic_H
+#define _H5FDpublic_H
+
+#include "H5public.h"
+#include "H5Fpublic.h"		/*for H5F_close_degree_t */
+
+#define H5_HAVE_VFL 1 /*define a convenient app feature test*/
+#define H5FD_VFD_DEFAULT 0   /* Default VFL driver value */
+
+/* Types of allocation requests: see H5Fpublic.h  */
+typedef enum H5F_mem_t	H5FD_mem_t;
+
+/* Map "fractal heap" header blocks to 'ohdr' type file memory, since its
+ * a fair amount of work to add a new kind of file memory and they are similar
+ * enough to object headers and probably too minor to deserve their own type.
+ *
+ * Map "fractal heap" indirect blocks to 'ohdr' type file memory, since they
+ * are similar to fractal heap header blocks.
+ *
+ * Map "fractal heap" direct blocks to 'lheap' type file memory, since they
+ * will be replacing local heaps.
+ *
+ * Map "fractal heap" 'huge' objects to 'draw' type file memory, since they
+ * represent large objects that are directly stored in the file.
+ *
+ *      -QAK
+ */
+#define H5FD_MEM_FHEAP_HDR      H5FD_MEM_OHDR
+#define H5FD_MEM_FHEAP_IBLOCK   H5FD_MEM_OHDR
+#define H5FD_MEM_FHEAP_DBLOCK   H5FD_MEM_LHEAP
+#define H5FD_MEM_FHEAP_HUGE_OBJ H5FD_MEM_DRAW
+
+/* Map "free space" header blocks to 'ohdr' type file memory, since its
+ * a fair amount of work to add a new kind of file memory and they are similar
+ * enough to object headers and probably too minor to deserve their own type.
+ *
+ * Map "free space" serialized sections to 'lheap' type file memory, since they
+ * are similar enough to local heap info.
+ *
+ *      -QAK
+ */
+#define H5FD_MEM_FSPACE_HDR     H5FD_MEM_OHDR
+#define H5FD_MEM_FSPACE_SINFO   H5FD_MEM_LHEAP
+
+/* Map "shared object header message" master table to 'ohdr' type file memory,
+ * since its a fair amount of work to add a new kind of file memory and they are
+ * similar enough to object headers and probably too minor to deserve their own
+ * type.
+ *
+ * Map "shared object header message" indices to 'btree' type file memory,
+ * since they are similar enough to B-tree nodes.
+ *
+ *      -QAK
+ */
+#define H5FD_MEM_SOHM_TABLE     H5FD_MEM_OHDR
+#define H5FD_MEM_SOHM_INDEX     H5FD_MEM_BTREE
+
+/*
+ * A free-list map which maps all types of allocation requests to a single
+ * free list.  This is useful for drivers that don't really care about
+ * keeping different requests segregated in the underlying file and which
+ * want to make most efficient reuse of freed memory.  The use of the
+ * H5FD_MEM_SUPER free list is arbitrary.
+ */
+#define H5FD_FLMAP_SINGLE {						      \
+    H5FD_MEM_SUPER,			/*default*/			      \
+    H5FD_MEM_SUPER,			/*super*/			      \
+    H5FD_MEM_SUPER,			/*btree*/			      \
+    H5FD_MEM_SUPER,			/*draw*/			      \
+    H5FD_MEM_SUPER,			/*gheap*/			      \
+    H5FD_MEM_SUPER,			/*lheap*/			      \
+    H5FD_MEM_SUPER			/*ohdr*/			      \
+}
+
+/*
+ * A free-list map which segregates requests into `raw' or `meta' data
+ * pools.
+ */
+#define H5FD_FLMAP_DICHOTOMY {						      \
+    H5FD_MEM_SUPER,			/*default*/			      \
+    H5FD_MEM_SUPER,			/*super*/			      \
+    H5FD_MEM_SUPER,			/*btree*/			      \
+    H5FD_MEM_DRAW,			/*draw*/			      \
+    H5FD_MEM_DRAW,			/*gheap*/			      \
+    H5FD_MEM_SUPER,			/*lheap*/			      \
+    H5FD_MEM_SUPER			/*ohdr*/			      \
+}
+
+/*
+ * The default free list map which causes each request type to use it's own
+ * free-list.
+ */
+#define H5FD_FLMAP_DEFAULT {						      \
+    H5FD_MEM_DEFAULT,			/*default*/			      \
+    H5FD_MEM_DEFAULT,			/*super*/			      \
+    H5FD_MEM_DEFAULT,			/*btree*/			      \
+    H5FD_MEM_DEFAULT,			/*draw*/			      \
+    H5FD_MEM_DEFAULT,			/*gheap*/			      \
+    H5FD_MEM_DEFAULT,			/*lheap*/			      \
+    H5FD_MEM_DEFAULT			/*ohdr*/			      \
+}
+
+
+/* Define VFL driver features that can be enabled on a per-driver basis */
+/* These are returned with the 'query' function pointer in H5FD_class_t */
+    /*
+     * Defining the H5FD_FEAT_AGGREGATE_METADATA for a VFL driver means that
+     * the library will attempt to allocate a larger block for metadata and
+     * then sub-allocate each metadata request from that larger block.
+     */
+#define H5FD_FEAT_AGGREGATE_METADATA    0x00000001
+    /*
+     * Defining the H5FD_FEAT_ACCUMULATE_METADATA for a VFL driver means that
+     * the library will attempt to cache metadata as it is written to the file
+     * and build up a larger block of metadata to eventually pass to the VFL
+     * 'write' routine.
+     *
+     * Distinguish between updating the metadata accumulator on writes and
+     * reads.  This is particularly (perhaps only, even) important for MPI-I/O
+     * where we guarantee that writes are collective, but reads may not be.
+     * If we were to allow the metadata accumulator to be written during a
+     * read operation, the application would hang.
+     */
+#define H5FD_FEAT_ACCUMULATE_METADATA_WRITE     0x00000002
+#define H5FD_FEAT_ACCUMULATE_METADATA_READ      0x00000004
+#define H5FD_FEAT_ACCUMULATE_METADATA   (H5FD_FEAT_ACCUMULATE_METADATA_WRITE|H5FD_FEAT_ACCUMULATE_METADATA_READ)
+    /*
+     * Defining the H5FD_FEAT_DATA_SIEVE for a VFL driver means that
+     * the library will attempt to cache raw data as it is read from/written to
+     * a file in a "data seive" buffer.  See Rajeev Thakur's papers:
+     *  http://www.mcs.anl.gov/~thakur/papers/romio-coll.ps.gz
+     *  http://www.mcs.anl.gov/~thakur/papers/mpio-high-perf.ps.gz
+     */
+#define H5FD_FEAT_DATA_SIEVE            0x00000008
+    /*
+     * Defining the H5FD_FEAT_AGGREGATE_SMALLDATA for a VFL driver means that
+     * the library will attempt to allocate a larger block for "small" raw data
+     * and then sub-allocate "small" raw data requests from that larger block.
+     */
+#define H5FD_FEAT_AGGREGATE_SMALLDATA   0x00000010
+    /*
+     * Defining the H5FD_FEAT_IGNORE_DRVRINFO for a VFL driver means that
+     * the library will ignore the driver info that is encoded in the file
+     * for the VFL driver.  (This will cause the driver info to be eliminated
+     * from the file when it is flushed/closed, if the file is opened R/W).
+     */
+#define H5FD_FEAT_IGNORE_DRVRINFO       0x00000020
+    /*
+     * Defining the H5FD_FEAT_DIRTY_SBLK_LOAD for a VFL driver means that
+     * the library will mark the superblock dirty when the file is opened
+     * R/W.  This will cause the driver info to be re-encoded when the file
+     * is flushed/closed.
+     */
+#define H5FD_FEAT_DIRTY_SBLK_LOAD       0x00000040
+    /*
+     * Defining the H5FD_FEAT_POSIX_COMPAT_HANDLE for a VFL driver means that
+     * the handle for the VFD (returned with the 'get_handle' callback) is
+     * of type 'int' and is compatible with POSIX I/O calls.
+     */
+#define H5FD_FEAT_POSIX_COMPAT_HANDLE   0x00000080
+    /* 
+     * Defining the H5FD_FEAT_ALLOW_FILE_IMAGE for a VFL driver means that
+     * the driver is able to use a file image in the fapl as the initial
+     * contents of a file.
+     */
+#define H5FD_FEAT_ALLOW_FILE_IMAGE      0x00000400
+    /*
+     * Defining the H5FD_FEAT_CAN_USE_FILE_IMAGE_CALLBACKS for a VFL driver
+     * means that the driver is able to use callbacks to make a copy of the
+     * image to store in memory.
+     */
+#define H5FD_FEAT_CAN_USE_FILE_IMAGE_CALLBACKS 0x00000800
+
+
+/* Forward declaration */
+typedef struct H5FD_t H5FD_t;
+
+/* Class information for each file driver */
+typedef struct H5FD_class_t {
+    const char *name;
+    haddr_t maxaddr;
+    H5F_close_degree_t fc_degree;
+    hsize_t (*sb_size)(H5FD_t *file);
+    herr_t  (*sb_encode)(H5FD_t *file, char *name/*out*/,
+                         unsigned char *p/*out*/);
+    herr_t  (*sb_decode)(H5FD_t *f, const char *name, const unsigned char *p);
+    size_t  fapl_size;
+    void *  (*fapl_get)(H5FD_t *file);
+    void *  (*fapl_copy)(const void *fapl);
+    herr_t  (*fapl_free)(void *fapl);
+    size_t  dxpl_size;
+    void *  (*dxpl_copy)(const void *dxpl);
+    herr_t  (*dxpl_free)(void *dxpl);
+    H5FD_t *(*open)(const char *name, unsigned flags, hid_t fapl,
+                    haddr_t maxaddr);
+    herr_t  (*close)(H5FD_t *file);
+    int     (*cmp)(const H5FD_t *f1, const H5FD_t *f2);
+    herr_t  (*query)(const H5FD_t *f1, unsigned long *flags);
+    herr_t  (*get_type_map)(const H5FD_t *file, H5FD_mem_t *type_map);
+    haddr_t (*alloc)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, hsize_t size);
+    herr_t  (*free)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id,
+                    haddr_t addr, hsize_t size);
+    haddr_t (*get_eoa)(const H5FD_t *file, H5FD_mem_t type);
+    herr_t  (*set_eoa)(H5FD_t *file, H5FD_mem_t type, haddr_t addr);
+    haddr_t (*get_eof)(const H5FD_t *file);
+    herr_t  (*get_handle)(H5FD_t *file, hid_t fapl, void**file_handle);
+    herr_t  (*read)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl,
+                    haddr_t addr, size_t size, void *buffer);
+    herr_t  (*write)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl,
+                     haddr_t addr, size_t size, const void *buffer);
+    herr_t  (*flush)(H5FD_t *file, hid_t dxpl_id, unsigned closing);
+    herr_t  (*truncate)(H5FD_t *file, hid_t dxpl_id, hbool_t closing);
+    herr_t  (*lock)(H5FD_t *file, unsigned char *oid, unsigned lock_type, hbool_t last);
+    herr_t  (*unlock)(H5FD_t *file, unsigned char *oid, hbool_t last);
+    H5FD_mem_t fl_map[H5FD_MEM_NTYPES];
+} H5FD_class_t;
+
+/* A free list is a singly-linked list of address/size pairs. */
+typedef struct H5FD_free_t {
+    haddr_t		addr;
+    hsize_t		size;
+    struct H5FD_free_t	*next;
+} H5FD_free_t;
+
+/*
+ * The main datatype for each driver. Public fields common to all drivers
+ * are declared here and the driver appends private fields in memory.
+ */
+struct H5FD_t {
+    hid_t               driver_id;      /*driver ID for this file   */
+    const H5FD_class_t *cls;            /*constant class info       */
+    unsigned long       fileno;         /* File 'serial' number     */
+    unsigned long       feature_flags;  /* VFL Driver feature Flags */
+    haddr_t             maxaddr;        /* For this file, overrides class */
+    haddr_t             base_addr;      /* Base address for HDF5 data w/in file */
+
+    /* Space allocation management fields */
+    hsize_t             threshold;      /* Threshold for alignment  */
+    hsize_t             alignment;      /* Allocation alignment     */
+};
+
+/* Define enum for the source of file image callbacks */
+typedef enum {
+    H5FD_FILE_IMAGE_OP_NO_OP,
+    H5FD_FILE_IMAGE_OP_PROPERTY_LIST_SET,     
+    H5FD_FILE_IMAGE_OP_PROPERTY_LIST_COPY,
+    H5FD_FILE_IMAGE_OP_PROPERTY_LIST_GET,
+    H5FD_FILE_IMAGE_OP_PROPERTY_LIST_CLOSE,
+    H5FD_FILE_IMAGE_OP_FILE_OPEN,
+    H5FD_FILE_IMAGE_OP_FILE_RESIZE,
+    H5FD_FILE_IMAGE_OP_FILE_CLOSE
+} H5FD_file_image_op_t;
+
+/* Define structure to hold file image callbacks */
+typedef struct {
+    void   *(*image_malloc)(size_t size, H5FD_file_image_op_t file_image_op, 
+                            void *udata);
+    void   *(*image_memcpy)(void *dest, const void *src, size_t size,
+                            H5FD_file_image_op_t file_image_op, void *udata);
+    void   *(*image_realloc)(void *ptr, size_t size, 
+                            H5FD_file_image_op_t file_image_op, void *udata);
+    herr_t  (*image_free)(void *ptr, H5FD_file_image_op_t file_image_op, 
+                          void *udata);
+    void   *(*udata_copy)(void *udata);
+    herr_t  (*udata_free)(void *udata);
+    void *udata;
+} H5FD_file_image_callbacks_t;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Function prototypes */
+H5_DLL hid_t H5FDregister(const H5FD_class_t *cls);
+H5_DLL herr_t H5FDunregister(hid_t driver_id);
+H5_DLL H5FD_t *H5FDopen(const char *name, unsigned flags, hid_t fapl_id,
+                        haddr_t maxaddr);
+H5_DLL herr_t H5FDclose(H5FD_t *file);
+H5_DLL int H5FDcmp(const H5FD_t *f1, const H5FD_t *f2);
+H5_DLL int H5FDquery(const H5FD_t *f, unsigned long *flags);
+H5_DLL haddr_t H5FDalloc(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, hsize_t size);
+H5_DLL herr_t H5FDfree(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id,
+                       haddr_t addr, hsize_t size);
+H5_DLL haddr_t H5FDget_eoa(H5FD_t *file, H5FD_mem_t type);
+H5_DLL herr_t H5FDset_eoa(H5FD_t *file, H5FD_mem_t type, haddr_t eoa);
+H5_DLL haddr_t H5FDget_eof(H5FD_t *file);
+H5_DLL herr_t H5FDget_vfd_handle(H5FD_t *file, hid_t fapl, void**file_handle);
+H5_DLL herr_t H5FDread(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id,
+                       haddr_t addr, size_t size, void *buf/*out*/);
+H5_DLL herr_t H5FDwrite(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id,
+                        haddr_t addr, size_t size, const void *buf);
+H5_DLL herr_t H5FDflush(H5FD_t *file, hid_t dxpl_id, unsigned closing);
+H5_DLL herr_t H5FDtruncate(H5FD_t *file, hid_t dxpl_id, hbool_t closing);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
+
diff --git a/privatemodules/nc4/include/H5FDsec2.h b/privatemodules/nc4/include/H5FDsec2.h
new file mode 100644
index 0000000000000000000000000000000000000000..b7db0d5ea998e779c8ea2f47ef42789ebaa5b39d
--- /dev/null
+++ b/privatemodules/nc4/include/H5FDsec2.h
@@ -0,0 +1,42 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Robb Matzke <matzke@llnl.gov>
+ *              Monday, August  2, 1999
+ *
+ * Purpose:	The public header file for the sec2 driver.
+ */
+#ifndef H5FDsec2_H
+#define H5FDsec2_H
+
+#include "H5Ipublic.h"
+
+#define H5FD_SEC2	(H5FD_sec2_init())
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+H5_DLL hid_t H5FD_sec2_init(void);
+H5_DLL void H5FD_sec2_term(void);
+H5_DLL herr_t H5Pset_fapl_sec2(hid_t fapl_id);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
diff --git a/privatemodules/nc4/include/H5FDstdio.h b/privatemodules/nc4/include/H5FDstdio.h
new file mode 100644
index 0000000000000000000000000000000000000000..80443d890165a4588df6b01e594309fc39bfe16c
--- /dev/null
+++ b/privatemodules/nc4/include/H5FDstdio.h
@@ -0,0 +1,41 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Robb Matzke <matzke@llnl.gov>
+ *              Monday, August  2, 1999
+ *
+ * Purpose:	The public header file for the sec2 driver.
+ */
+#ifndef H5FDstdio_H
+#define H5FDstdio_H
+
+#include "H5Ipublic.h"
+
+#define H5FD_STDIO	(H5FD_stdio_init())
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+H5_DLL hid_t H5FD_stdio_init(void);
+H5_DLL void H5FD_stdio_term(void);
+H5_DLL herr_t H5Pset_fapl_stdio(hid_t fapl_id);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/privatemodules/nc4/include/H5Fpublic.h b/privatemodules/nc4/include/H5Fpublic.h
new file mode 100644
index 0000000000000000000000000000000000000000..8466a26aa6c28d9c309c70a4d0129b0af533254d
--- /dev/null
+++ b/privatemodules/nc4/include/H5Fpublic.h
@@ -0,0 +1,196 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * This file contains public declarations for the H5F module.
+ */
+#ifndef _H5Fpublic_H
+#define _H5Fpublic_H
+
+/* Public header files needed by this file */
+#include "H5public.h"
+#include "H5ACpublic.h"
+#include "H5Ipublic.h"
+
+/* When this header is included from a private header, don't make calls to H5check() */
+#undef H5CHECK
+#ifndef _H5private_H
+#define H5CHECK          H5check(),
+#else   /* _H5private_H */
+#define H5CHECK
+#endif  /* _H5private_H */
+
+/*
+ * These are the bits that can be passed to the `flags' argument of
+ * H5Fcreate() and H5Fopen(). Use the bit-wise OR operator (|) to combine
+ * them as needed.  As a side effect, they call H5check_version() to make sure
+ * that the application is compiled with a version of the hdf5 header files
+ * which are compatible with the library to which the application is linked.
+ * We're assuming that these constants are used rather early in the hdf5
+ * session.
+ *
+ */
+#define H5F_ACC_RDONLY	(H5CHECK 0x0000u)	/*absence of rdwr => rd-only */
+#define H5F_ACC_RDWR	(H5CHECK 0x0001u)	/*open for read and write    */
+#define H5F_ACC_TRUNC	(H5CHECK 0x0002u)	/*overwrite existing files   */
+#define H5F_ACC_EXCL	(H5CHECK 0x0004u)	/*fail if file already exists*/
+#define H5F_ACC_DEBUG	(H5CHECK 0x0008u)	/*print debug info	     */
+#define H5F_ACC_CREAT	(H5CHECK 0x0010u)	/*create non-existing files  */
+
+/* Value passed to H5Pset_elink_acc_flags to cause flags to be taken from the
+ * parent file. */
+#define H5F_ACC_DEFAULT (H5CHECK 0xffffu)	/*ignore setting on lapl     */
+
+/* Flags for H5Fget_obj_count() & H5Fget_obj_ids() calls */
+#define H5F_OBJ_FILE	(0x0001u)       /* File objects */
+#define H5F_OBJ_DATASET	(0x0002u)       /* Dataset objects */
+#define H5F_OBJ_GROUP	(0x0004u)       /* Group objects */
+#define H5F_OBJ_DATATYPE (0x0008u)      /* Named datatype objects */
+#define H5F_OBJ_ATTR    (0x0010u)       /* Attribute objects */
+#define H5F_OBJ_ALL 	(H5F_OBJ_FILE|H5F_OBJ_DATASET|H5F_OBJ_GROUP|H5F_OBJ_DATATYPE|H5F_OBJ_ATTR)
+#define H5F_OBJ_LOCAL   (0x0020u)       /* Restrict search to objects opened through current file ID */
+                                        /* (as opposed to objects opened through any file ID accessing this file) */
+
+#define H5F_FAMILY_DEFAULT (hsize_t)0
+
+#ifdef H5_HAVE_PARALLEL
+/*
+ * Use this constant string as the MPI_Info key to set H5Fmpio debug flags.
+ * To turn on H5Fmpio debug flags, set the MPI_Info value with this key to
+ * have the value of a string consisting of the characters that turn on the
+ * desired flags.
+ */
+#define H5F_MPIO_DEBUG_KEY "H5F_mpio_debug_key"
+#endif /* H5_HAVE_PARALLEL */
+
+/* The difference between a single file and a set of mounted files */
+typedef enum H5F_scope_t {
+    H5F_SCOPE_LOCAL	= 0,	/*specified file handle only		*/
+    H5F_SCOPE_GLOBAL	= 1 	/*entire virtual file			*/
+} H5F_scope_t;
+
+/* Unlimited file size for H5Pset_external() */
+#define H5F_UNLIMITED	((hsize_t)(-1L))
+
+/* How does file close behave?
+ * H5F_CLOSE_DEFAULT - Use the degree pre-defined by underlining VFL
+ * H5F_CLOSE_WEAK    - file closes only after all opened objects are closed
+ * H5F_CLOSE_SEMI    - if no opened objects, file is close; otherwise, file
+		       close fails
+ * H5F_CLOSE_STRONG  - if there are opened objects, close them first, then
+		       close file
+ */
+typedef enum H5F_close_degree_t {
+    H5F_CLOSE_DEFAULT   = 0,
+    H5F_CLOSE_WEAK      = 1,
+    H5F_CLOSE_SEMI      = 2,
+    H5F_CLOSE_STRONG    = 3
+} H5F_close_degree_t;
+
+/* Current "global" information about file */
+/* (just size info currently) */
+typedef struct H5F_info_t {
+    hsize_t		super_ext_size;	/* Superblock extension size */
+    struct {
+	hsize_t		hdr_size;       /* Shared object header message header size */
+	H5_ih_info_t	msgs_info;      /* Shared object header message index & heap size */
+    } sohm;
+} H5F_info_t;
+
+/*
+ * Types of allocation requests. The values larger than H5FD_MEM_DEFAULT
+ * should not change other than adding new types to the end. These numbers
+ * might appear in files.
+ *
+ * Note: please change the log VFD flavors array if you change this
+ * enumeration.
+ */
+typedef enum H5F_mem_t {
+    H5FD_MEM_NOLIST     = -1,   /* Data should not appear in the free list.
+                                 * Must be negative.
+                                 */
+    H5FD_MEM_DEFAULT    = 0,    /* Value not yet set.  Can also be the
+                                 * datatype set in a larger allocation
+                                 * that will be suballocated by the library.
+                                 * Must be zero.
+                                 */
+    H5FD_MEM_SUPER      = 1,    /* Superblock data */
+    H5FD_MEM_BTREE      = 2,    /* B-tree data */
+    H5FD_MEM_DRAW       = 3,    /* Raw data (content of datasets, etc.) */
+    H5FD_MEM_GHEAP      = 4,    /* Global heap data */
+    H5FD_MEM_LHEAP      = 5,    /* Local heap data */
+    H5FD_MEM_OHDR       = 6,    /* Object header data */
+
+    H5FD_MEM_NTYPES             /* Sentinel value - must be last */
+} H5F_mem_t;
+
+/* Library's file format versions */
+typedef enum H5F_libver_t {
+    H5F_LIBVER_EARLIEST,        /* Use the earliest possible format for storing objects */
+    H5F_LIBVER_LATEST           /* Use the latest possible format available for storing objects*/
+} H5F_libver_t;
+
+/* Define file format version for 1.8 to prepare for 1.10 release.  
+ * (Not used anywhere now)*/
+#define H5F_LIBVER_18 H5F_LIBVER_LATEST
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Functions in H5F.c */
+H5_DLL htri_t H5Fis_hdf5(const char *filename);
+H5_DLL hid_t  H5Fcreate(const char *filename, unsigned flags,
+		  	  hid_t create_plist, hid_t access_plist);
+H5_DLL hid_t  H5Fopen(const char *filename, unsigned flags,
+		        hid_t access_plist);
+H5_DLL hid_t  H5Freopen(hid_t file_id);
+H5_DLL herr_t H5Fflush(hid_t object_id, H5F_scope_t scope);
+H5_DLL herr_t H5Fclose(hid_t file_id);
+H5_DLL hid_t  H5Fget_create_plist(hid_t file_id);
+H5_DLL hid_t  H5Fget_access_plist(hid_t file_id);
+H5_DLL herr_t H5Fget_intent(hid_t file_id, unsigned * intent);
+H5_DLL ssize_t H5Fget_obj_count(hid_t file_id, unsigned types);
+H5_DLL ssize_t H5Fget_obj_ids(hid_t file_id, unsigned types, size_t max_objs, hid_t *obj_id_list);
+H5_DLL herr_t H5Fget_vfd_handle(hid_t file_id, hid_t fapl, void **file_handle);
+H5_DLL herr_t H5Fmount(hid_t loc, const char *name, hid_t child, hid_t plist);
+H5_DLL herr_t H5Funmount(hid_t loc, const char *name);
+H5_DLL hssize_t H5Fget_freespace(hid_t file_id);
+H5_DLL herr_t H5Fget_filesize(hid_t file_id, hsize_t *size);
+H5_DLL ssize_t H5Fget_file_image(hid_t file_id, void * buf_ptr, size_t buf_len);
+H5_DLL herr_t H5Fget_mdc_config(hid_t file_id,
+				H5AC_cache_config_t * config_ptr);
+H5_DLL herr_t H5Fset_mdc_config(hid_t file_id,
+				H5AC_cache_config_t * config_ptr);
+H5_DLL herr_t H5Fget_mdc_hit_rate(hid_t file_id, double * hit_rate_ptr);
+H5_DLL herr_t H5Fget_mdc_size(hid_t file_id,
+                              size_t * max_size_ptr,
+                              size_t * min_clean_size_ptr,
+                              size_t * cur_size_ptr,
+                              int * cur_num_entries_ptr);
+H5_DLL herr_t H5Freset_mdc_hit_rate_stats(hid_t file_id);
+H5_DLL ssize_t H5Fget_name(hid_t obj_id, char *name, size_t size);
+H5_DLL herr_t H5Fget_info(hid_t obj_id, H5F_info_t *bh_info);
+H5_DLL herr_t H5Fclear_elink_file_cache(hid_t file_id);
+#ifdef H5_HAVE_PARALLEL
+H5_DLL herr_t H5Fset_mpi_atomicity(hid_t file_id, hbool_t flag);
+H5_DLL herr_t H5Fget_mpi_atomicity(hid_t file_id, hbool_t *flag);
+#endif /* H5_HAVE_PARALLEL */
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* _H5Fpublic_H */
+
diff --git a/privatemodules/nc4/include/H5Gpublic.h b/privatemodules/nc4/include/H5Gpublic.h
new file mode 100644
index 0000000000000000000000000000000000000000..5b8b05478a5bdf36df8efbf507ec55b6b03fc589
--- /dev/null
+++ b/privatemodules/nc4/include/H5Gpublic.h
@@ -0,0 +1,178 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*-------------------------------------------------------------------------
+ *
+ * Created:             H5Gpublic.h
+ *                      Jul 11 1997
+ *                      Robb Matzke <matzke@llnl.gov>
+ *
+ * Purpose:             Public declarations for the H5G package
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef _H5Gpublic_H
+#define _H5Gpublic_H
+
+/* System headers needed by this file */
+#include <sys/types.h>
+
+/* Public headers needed by this file */
+#include "H5public.h"		/* Generic Functions			*/
+#include "H5Lpublic.h"		/* Links                                */
+#include "H5Opublic.h"		/* Object headers			*/
+#include "H5Tpublic.h"		/* Datatypes				*/
+
+/*****************/
+/* Public Macros */
+/*****************/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*******************/
+/* Public Typedefs */
+/*******************/
+
+/* Types of link storage for groups */
+typedef enum H5G_storage_type_t {
+    H5G_STORAGE_TYPE_UNKNOWN = -1,	/* Unknown link storage type	*/
+    H5G_STORAGE_TYPE_SYMBOL_TABLE,      /* Links in group are stored with a "symbol table" */
+                                        /* (this is sometimes called "old-style" groups) */
+    H5G_STORAGE_TYPE_COMPACT,		/* Links are stored in object header */
+    H5G_STORAGE_TYPE_DENSE 		/* Links are stored in fractal heap & indexed with v2 B-tree */
+} H5G_storage_type_t;
+
+/* Information struct for group (for H5Gget_info/H5Gget_info_by_name/H5Gget_info_by_idx) */
+typedef struct H5G_info_t {
+    H5G_storage_type_t 	storage_type;	/* Type of storage for links in group */
+    hsize_t 	nlinks;		        /* Number of links in group */
+    int64_t     max_corder;             /* Current max. creation order value for group */
+    hbool_t     mounted;                /* Whether group has a file mounted on it */
+} H5G_info_t;
+
+/********************/
+/* Public Variables */
+/********************/
+
+
+/*********************/
+/* Public Prototypes */
+/*********************/
+H5_DLL hid_t H5Gcreate2(hid_t loc_id, const char *name, hid_t lcpl_id,
+    hid_t gcpl_id, hid_t gapl_id);
+H5_DLL hid_t H5Gcreate_anon(hid_t loc_id, hid_t gcpl_id, hid_t gapl_id);
+H5_DLL hid_t H5Gopen2(hid_t loc_id, const char *name, hid_t gapl_id);
+H5_DLL hid_t H5Gget_create_plist(hid_t group_id);
+H5_DLL herr_t H5Gget_info(hid_t loc_id, H5G_info_t *ginfo);
+H5_DLL herr_t H5Gget_info_by_name(hid_t loc_id, const char *name, H5G_info_t *ginfo,
+    hid_t lapl_id);
+H5_DLL herr_t H5Gget_info_by_idx(hid_t loc_id, const char *group_name,
+    H5_index_t idx_type, H5_iter_order_t order, hsize_t n, H5G_info_t *ginfo,
+    hid_t lapl_id);
+H5_DLL herr_t H5Gclose(hid_t group_id);
+
+/* Symbols defined for compatibility with previous versions of the HDF5 API.
+ *
+ * Use of these symbols is deprecated.
+ */
+#ifndef H5_NO_DEPRECATED_SYMBOLS
+
+/* Macros */
+
+/* Link definitions */
+#define H5G_SAME_LOC H5L_SAME_LOC
+#define H5G_LINK_ERROR H5L_TYPE_ERROR
+#define H5G_LINK_HARD H5L_TYPE_HARD
+#define H5G_LINK_SOFT H5L_TYPE_SOFT
+#define H5G_link_t H5L_type_t
+
+/* Macros for types of objects in a group (see H5G_obj_t definition) */
+#define H5G_NTYPES	256		/* Max possible number of types	*/
+#define H5G_NLIBTYPES	8		/* Number of internal types	*/
+#define H5G_NUSERTYPES	(H5G_NTYPES - H5G_NLIBTYPES)
+#define H5G_USERTYPE(X)	(8 + (X))	/* User defined types		*/
+
+
+/* Typedefs */
+
+/*
+ * An object has a certain type. The first few numbers are reserved for use
+ * internally by HDF5. Users may add their own types with higher values.  The
+ * values are never stored in the file -- they only exist while an
+ * application is running.  An object may satisfy the `isa' function for more
+ * than one type.
+ */
+typedef enum H5G_obj_t {
+    H5G_UNKNOWN = -1,		/* Unknown object type		*/
+    H5G_GROUP,		        /* Object is a group		*/
+    H5G_DATASET,		/* Object is a dataset		*/
+    H5G_TYPE,			/* Object is a named data type	*/
+    H5G_LINK,		        /* Object is a symbolic link	*/
+    H5G_UDLINK,		        /* Object is a user-defined link */
+    H5G_RESERVED_5,		/* Reserved for future use	*/
+    H5G_RESERVED_6,		/* Reserved for future use	*/
+    H5G_RESERVED_7		/* Reserved for future use	*/
+} H5G_obj_t;
+
+/* Prototype for H5Giterate() operator */
+typedef herr_t (*H5G_iterate_t)(hid_t group, const char *name, void *op_data);
+
+/* Information about an object */
+typedef struct H5G_stat_t {
+    unsigned long 	fileno[2];	/*file number			*/
+    unsigned long 	objno[2];	/*object number			*/
+    unsigned 		nlink;		/*number of hard links to object*/
+    H5G_obj_t 		type;		/*basic object type		*/
+    time_t		mtime;		/*modification time		*/
+    size_t		linklen;	/*symbolic link value length	*/
+    H5O_stat_t          ohdr;           /* Object header information    */
+} H5G_stat_t;
+
+
+/* Function prototypes */
+H5_DLL hid_t H5Gcreate1(hid_t loc_id, const char *name, size_t size_hint);
+H5_DLL hid_t H5Gopen1(hid_t loc_id, const char *name);
+H5_DLL herr_t H5Glink(hid_t cur_loc_id, H5G_link_t type, const char *cur_name,
+    const char *new_name);
+H5_DLL herr_t H5Glink2(hid_t cur_loc_id, const char *cur_name, H5G_link_t type,
+    hid_t new_loc_id, const char *new_name);
+H5_DLL herr_t H5Gmove(hid_t src_loc_id, const char *src_name,
+    const char *dst_name);
+H5_DLL herr_t H5Gmove2(hid_t src_loc_id, const char *src_name, hid_t dst_loc_id,
+    const char *dst_name);
+H5_DLL herr_t H5Gunlink(hid_t loc_id, const char *name);
+H5_DLL herr_t H5Gget_linkval(hid_t loc_id, const char *name, size_t size,
+    char *buf/*out*/);
+H5_DLL herr_t H5Gset_comment(hid_t loc_id, const char *name, const char *comment);
+H5_DLL int H5Gget_comment(hid_t loc_id, const char *name, size_t bufsize,
+    char *buf);
+H5_DLL herr_t H5Giterate(hid_t loc_id, const char *name, int *idx,
+        H5G_iterate_t op, void *op_data);
+H5_DLL herr_t H5Gget_num_objs(hid_t loc_id, hsize_t *num_objs);
+H5_DLL herr_t H5Gget_objinfo(hid_t loc_id, const char *name,
+    hbool_t follow_link, H5G_stat_t *statbuf/*out*/);
+H5_DLL ssize_t H5Gget_objname_by_idx(hid_t loc_id, hsize_t idx, char* name,
+    size_t size);
+H5_DLL H5G_obj_t H5Gget_objtype_by_idx(hid_t loc_id, hsize_t idx);
+
+#endif /* H5_NO_DEPRECATED_SYMBOLS */
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* _H5Gpublic_H */
+
diff --git a/privatemodules/nc4/include/H5IMpublic.h b/privatemodules/nc4/include/H5IMpublic.h
new file mode 100644
index 0000000000000000000000000000000000000000..6833f02d6e437e1de15d0f1cfc846039974ba8a8
--- /dev/null
+++ b/privatemodules/nc4/include/H5IMpublic.h
@@ -0,0 +1,87 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef _H5IMpublic_H
+#define _H5IMpublic_H
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+H5_HLDLL herr_t  H5IMmake_image_8bit( hid_t loc_id,
+                            const char *dset_name,
+                            hsize_t width,
+                            hsize_t height,
+                            const unsigned char *buffer );
+
+H5_HLDLL herr_t  H5IMmake_image_24bit( hid_t loc_id,
+                             const char *dset_name,
+                             hsize_t width,
+                             hsize_t height,
+                             const char *interlace,
+                             const unsigned char *buffer );
+
+H5_HLDLL herr_t  H5IMget_image_info( hid_t loc_id,
+                     const char *dset_name,
+                     hsize_t *width,
+                     hsize_t *height,
+                     hsize_t *planes,
+                     char    *interlace,
+                     hssize_t *npals );
+
+H5_HLDLL herr_t  H5IMread_image( hid_t loc_id,
+                       const char *dset_name,
+                       unsigned char *buffer );
+
+H5_HLDLL herr_t  H5IMmake_palette( hid_t loc_id,
+                         const char *pal_name,
+                         const hsize_t *pal_dims,
+                         const unsigned char *pal_data );
+
+H5_HLDLL herr_t  H5IMlink_palette( hid_t loc_id,
+                        const char *image_name,
+                        const char *pal_name );
+
+H5_HLDLL herr_t  H5IMunlink_palette( hid_t loc_id,
+                           const char *image_name,
+                           const char *pal_name );
+
+H5_HLDLL herr_t  H5IMget_npalettes( hid_t loc_id,
+                          const char *image_name,
+                          hssize_t *npals );
+
+H5_HLDLL herr_t  H5IMget_palette_info( hid_t loc_id,
+                        const char *image_name,
+                        int pal_number,
+                        hsize_t *pal_dims );
+
+H5_HLDLL herr_t  H5IMget_palette( hid_t loc_id,
+                        const char *image_name,
+                        int pal_number,
+                        unsigned char *pal_data );
+
+H5_HLDLL herr_t  H5IMis_image( hid_t loc_id,
+                     const char *dset_name );
+
+H5_HLDLL herr_t  H5IMis_palette( hid_t loc_id,
+                     const char *dset_name );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/privatemodules/nc4/include/H5Ipublic.h b/privatemodules/nc4/include/H5Ipublic.h
new file mode 100644
index 0000000000000000000000000000000000000000..d6305564544b500bad7a510b717f16f1f322aad7
--- /dev/null
+++ b/privatemodules/nc4/include/H5Ipublic.h
@@ -0,0 +1,104 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * This file contains function prototypes for each exported function in
+ * the H5I module.
+ */
+#ifndef _H5Ipublic_H
+#define _H5Ipublic_H
+
+/* Public headers needed by this file */
+#include "H5public.h"
+
+/*
+ * Library type values.  Start with `1' instead of `0' because it makes the
+ * tracing output look better when hid_t values are large numbers.  Change the
+ * TYPE_BITS in H5I.c if the MAXID gets larger than 32 (an assertion will
+ * fail otherwise).
+ *
+ * When adding types here, add a section to the 'misc19' test in test/tmisc.c
+ * to verify that the H5I{inc|dec|get}_ref() routines work correctly with in.
+ *
+ */
+typedef enum H5I_type_t {
+    H5I_UNINIT		= (-2), /*uninitialized type			    */
+    H5I_BADID		= (-1),	/*invalid Type				    */
+    H5I_FILE		= 1,	/*type ID for File objects		    */
+    H5I_GROUP,		        /*type ID for Group objects		    */
+    H5I_DATATYPE,	        /*type ID for Datatype objects		    */
+    H5I_DATASPACE,	        /*type ID for Dataspace objects		    */
+    H5I_DATASET,	        /*type ID for Dataset objects		    */
+    H5I_ATTR,		        /*type ID for Attribute objects		    */
+    H5I_REFERENCE,	        /*type ID for Reference objects		    */
+    H5I_VFL,			/*type ID for virtual file layer	    */
+    H5I_GENPROP_CLS,            /*type ID for generic property list classes */
+    H5I_GENPROP_LST,            /*type ID for generic property lists        */
+    H5I_ERROR_CLASS,            /*type ID for error classes		    */
+    H5I_ERROR_MSG,              /*type ID for error messages		    */
+    H5I_ERROR_STACK,            /*type ID for error stacks		    */
+    H5I_NTYPES		        /*number of library types, MUST BE LAST!    */
+} H5I_type_t;
+
+/* Type of atoms to return to users */
+typedef int hid_t;
+#define H5_SIZEOF_HID_T         H5_SIZEOF_INT
+
+/* An invalid object ID. This is also negative for error return. */
+#define H5I_INVALID_HID         (-1)
+
+/*
+ * Function for freeing objects. This function will be called with an object
+ * ID type number and a pointer to the object. The function should free the
+ * object and return non-negative to indicate that the object
+ * can be removed from the ID type. If the function returns negative
+ * (failure) then the object will remain in the ID type.
+ */
+typedef herr_t (*H5I_free_t)(void*);
+
+/* Type of the function to compare objects & keys */
+typedef int (*H5I_search_func_t)(void *obj, hid_t id, void *key);
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Public API functions */
+
+H5_DLL hid_t H5Iregister(H5I_type_t type, const void *object);
+H5_DLL void *H5Iobject_verify(hid_t id, H5I_type_t id_type);
+H5_DLL void *H5Iremove_verify(hid_t id, H5I_type_t id_type);
+H5_DLL H5I_type_t H5Iget_type(hid_t id);
+H5_DLL hid_t H5Iget_file_id(hid_t id);
+H5_DLL ssize_t H5Iget_name(hid_t id, char *name/*out*/, size_t size);
+H5_DLL int H5Iinc_ref(hid_t id);
+H5_DLL int H5Idec_ref(hid_t id);
+H5_DLL int H5Iget_ref(hid_t id);
+H5_DLL H5I_type_t H5Iregister_type(size_t hash_size, unsigned reserved, H5I_free_t free_func);
+H5_DLL herr_t H5Iclear_type(H5I_type_t type, hbool_t force);
+H5_DLL herr_t H5Idestroy_type(H5I_type_t type);
+H5_DLL int H5Iinc_type_ref(H5I_type_t type);
+H5_DLL int H5Idec_type_ref(H5I_type_t type);
+H5_DLL int H5Iget_type_ref(H5I_type_t type);
+H5_DLL void *H5Isearch(H5I_type_t type, H5I_search_func_t func, void *key);
+H5_DLL herr_t H5Inmembers(H5I_type_t type, hsize_t *num_members);
+H5_DLL htri_t H5Itype_exists(H5I_type_t type);
+H5_DLL htri_t H5Iis_valid(hid_t id);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* _H5Ipublic_H */
+
diff --git a/privatemodules/nc4/include/H5LTpublic.h b/privatemodules/nc4/include/H5LTpublic.h
new file mode 100644
index 0000000000000000000000000000000000000000..929c6bdde4a4ed7ea3d3379546b2c6d1187cf548
--- /dev/null
+++ b/privatemodules/nc4/include/H5LTpublic.h
@@ -0,0 +1,370 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef _H5LTpublic_H
+#define _H5LTpublic_H
+
+/* Flag definitions for H5LTopen_file_image() */
+#define H5LT_FILE_IMAGE_OPEN_RW      0x0001 /* Open image for read-write */
+#define H5LT_FILE_IMAGE_DONT_COPY    0x0002 /* The HDF5 lib won't copy   */
+/* user supplied image buffer. The same image is open with the core driver.  */
+#define H5LT_FILE_IMAGE_DONT_RELEASE 0x0004 /* The HDF5 lib won't        */
+/* deallocate user supplied image buffer. The user application is reponsible */
+/* for doing so.                                                             */ 
+#define H5LT_FILE_IMAGE_ALL          0x0007
+
+typedef enum H5LT_lang_t {
+    H5LT_LANG_ERR = -1, /*this is the first*/
+    H5LT_DDL      = 0,  /*for DDL*/
+    H5LT_C        = 1,  /*for C*/
+    H5LT_FORTRAN  = 2,  /*for Fortran*/
+    H5LT_NO_LANG  = 3   /*this is the last*/
+} H5LT_lang_t;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*-------------------------------------------------------------------------
+ *
+ * Make dataset functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+H5_HLDLL herr_t  H5LTmake_dataset( hid_t loc_id,
+                         const char *dset_name,
+                         int rank,
+                         const hsize_t *dims,
+                         hid_t type_id,
+                         const void *buffer );
+
+H5_HLDLL herr_t  H5LTmake_dataset_char( hid_t loc_id,
+                              const char *dset_name,
+                              int rank,
+                              const hsize_t *dims,
+                              const char *buffer );
+
+H5_HLDLL herr_t  H5LTmake_dataset_short( hid_t loc_id,
+                               const char *dset_name,
+                               int rank,
+                               const hsize_t *dims,
+                               const short *buffer );
+
+H5_HLDLL herr_t  H5LTmake_dataset_int( hid_t loc_id,
+                             const char *dset_name,
+                             int rank,
+                             const hsize_t *dims,
+                             const int *buffer );
+
+H5_HLDLL herr_t  H5LTmake_dataset_long( hid_t loc_id,
+                              const char *dset_name,
+                              int rank,
+                              const hsize_t *dims,
+                              const long *buffer );
+
+H5_HLDLL herr_t  H5LTmake_dataset_float( hid_t loc_id,
+                               const char *dset_name,
+                               int rank,
+                               const hsize_t *dims,
+                               const float *buffer );
+
+H5_HLDLL herr_t  H5LTmake_dataset_double( hid_t loc_id,
+                                const char *dset_name,
+                                int rank,
+                                const hsize_t *dims,
+                                const double *buffer );
+
+H5_HLDLL herr_t  H5LTmake_dataset_string( hid_t loc_id,
+                               const char *dset_name,
+                               const char *buf );
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Read dataset functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+H5_HLDLL herr_t  H5LTread_dataset( hid_t loc_id,
+                         const char *dset_name,
+                         hid_t type_id,
+                         void *buffer );
+
+H5_HLDLL herr_t  H5LTread_dataset_char( hid_t loc_id,
+                              const char *dset_name,
+                              char *buffer );
+
+H5_HLDLL herr_t  H5LTread_dataset_short( hid_t loc_id,
+                               const char *dset_name,
+                               short *buffer );
+
+H5_HLDLL herr_t  H5LTread_dataset_int( hid_t loc_id,
+                             const char *dset_name,
+                             int *buffer );
+
+H5_HLDLL herr_t  H5LTread_dataset_long( hid_t loc_id,
+                              const char *dset_name,
+                              long *buffer );
+
+H5_HLDLL herr_t  H5LTread_dataset_float( hid_t loc_id,
+                               const char *dset_name,
+                               float *buffer );
+
+H5_HLDLL herr_t  H5LTread_dataset_double( hid_t loc_id,
+                                const char *dset_name,
+                                double *buffer );
+
+H5_HLDLL herr_t  H5LTread_dataset_string( hid_t loc_id,
+                                const char *dset_name,
+                                char *buf );
+
+/*-------------------------------------------------------------------------
+ *
+ * Query dataset functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+H5_HLDLL herr_t  H5LTget_dataset_ndims( hid_t loc_id,
+                             const char *dset_name,
+                             int *rank );
+
+H5_HLDLL herr_t  H5LTget_dataset_info( hid_t loc_id,
+                             const char *dset_name,
+                             hsize_t *dims,
+                             H5T_class_t *type_class,
+                             size_t *type_size );
+
+H5_HLDLL herr_t  H5LTfind_dataset( hid_t loc_id, const char *name );
+
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Set attribute functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+H5_HLDLL herr_t  H5LTset_attribute_string( hid_t loc_id,
+                                 const char *obj_name,
+                                 const char *attr_name,
+                                 const char *attr_data );
+
+H5_HLDLL herr_t  H5LTset_attribute_char( hid_t loc_id,
+                               const char *obj_name,
+                               const char *attr_name,
+                               const char *buffer,
+                               size_t size );
+
+H5_HLDLL herr_t  H5LTset_attribute_uchar( hid_t loc_id,
+                               const char *obj_name,
+                               const char *attr_name,
+                               const unsigned char *buffer,
+                               size_t size );
+
+H5_HLDLL herr_t  H5LTset_attribute_short( hid_t loc_id,
+                              const char *obj_name,
+                              const char *attr_name,
+                              const short *buffer,
+                              size_t size );
+
+H5_HLDLL herr_t  H5LTset_attribute_ushort( hid_t loc_id,
+                              const char *obj_name,
+                              const char *attr_name,
+                              const unsigned short *buffer,
+                              size_t size );
+
+H5_HLDLL herr_t  H5LTset_attribute_int( hid_t loc_id,
+                              const char *obj_name,
+                              const char *attr_name,
+                              const int *buffer,
+                              size_t size );
+
+H5_HLDLL herr_t  H5LTset_attribute_uint( hid_t loc_id,
+                              const char *obj_name,
+                              const char *attr_name,
+                              const unsigned int *buffer,
+                              size_t size );
+
+H5_HLDLL herr_t  H5LTset_attribute_long( hid_t loc_id,
+                               const char *obj_name,
+                               const char *attr_name,
+                               const long *buffer,
+                               size_t size );
+
+H5_HLDLL herr_t  H5LTset_attribute_long_long( hid_t loc_id,
+                               const char *obj_name,
+                               const char *attr_name,
+                               const long long *buffer,
+                               size_t size );
+
+H5_HLDLL herr_t  H5LTset_attribute_ulong( hid_t loc_id,
+                               const char *obj_name,
+                               const char *attr_name,
+                               const unsigned long *buffer,
+                               size_t size );
+
+H5_HLDLL herr_t  H5LTset_attribute_float( hid_t loc_id,
+                                const char *obj_name,
+                                const char *attr_name,
+                                const float *buffer,
+                                size_t size );
+
+H5_HLDLL herr_t  H5LTset_attribute_double( hid_t loc_id,
+                                 const char *obj_name,
+                                 const char *attr_name,
+                                 const double *buffer,
+                                 size_t size );
+
+/*-------------------------------------------------------------------------
+ *
+ * Get attribute functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+H5_HLDLL herr_t  H5LTget_attribute( hid_t loc_id,
+                          const char *obj_name,
+                          const char *attr_name,
+                          hid_t mem_type_id,
+                          void *data );
+
+H5_HLDLL herr_t  H5LTget_attribute_string( hid_t loc_id,
+                                 const char *obj_name,
+                                 const char *attr_name,
+                                 char *data );
+
+H5_HLDLL herr_t  H5LTget_attribute_char( hid_t loc_id,
+                               const char *obj_name,
+                               const char *attr_name,
+                               char *data );
+
+H5_HLDLL herr_t  H5LTget_attribute_uchar( hid_t loc_id,
+                               const char *obj_name,
+                               const char *attr_name,
+                               unsigned char *data );
+
+H5_HLDLL herr_t  H5LTget_attribute_short( hid_t loc_id,
+                                const char *obj_name,
+                                const char *attr_name,
+                                short *data );
+
+H5_HLDLL herr_t  H5LTget_attribute_ushort( hid_t loc_id,
+                                const char *obj_name,
+                                const char *attr_name,
+                                unsigned short *data );
+
+H5_HLDLL herr_t  H5LTget_attribute_int( hid_t loc_id,
+                              const char *obj_name,
+                              const char *attr_name,
+                              int *data );
+
+H5_HLDLL herr_t  H5LTget_attribute_uint( hid_t loc_id,
+                              const char *obj_name,
+                              const char *attr_name,
+                              unsigned int *data );
+
+H5_HLDLL herr_t  H5LTget_attribute_long( hid_t loc_id,
+                               const char *obj_name,
+                               const char *attr_name,
+                               long *data );
+
+H5_HLDLL herr_t  H5LTget_attribute_long_long( hid_t loc_id,
+                               const char *obj_name,
+                               const char *attr_name,
+                               long long *data );
+
+H5_HLDLL herr_t  H5LTget_attribute_ulong( hid_t loc_id,
+                               const char *obj_name,
+                               const char *attr_name,
+                               unsigned long *data );
+
+H5_HLDLL herr_t  H5LTget_attribute_float( hid_t loc_id,
+                                const char *obj_name,
+                                const char *attr_name,
+                                float *data );
+
+H5_HLDLL herr_t  H5LTget_attribute_double( hid_t loc_id,
+                                 const char *obj_name,
+                                 const char *attr_name,
+                                 double *data );
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Query attribute functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+H5_HLDLL herr_t  H5LTget_attribute_ndims( hid_t loc_id,
+                                const char *obj_name,
+                                const char *attr_name,
+                                int *rank );
+
+H5_HLDLL herr_t  H5LTget_attribute_info( hid_t loc_id,
+                               const char *obj_name,
+                               const char *attr_name,
+                               hsize_t *dims,
+                               H5T_class_t *type_class,
+                               size_t *type_size );
+
+
+
+
+
+/*-------------------------------------------------------------------------
+ *
+ * General functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+H5_HLDLL hid_t H5LTtext_to_dtype(const char *text, H5LT_lang_t lang_type);
+H5_HLDLL herr_t H5LTdtype_to_text(hid_t dtype, char *str, H5LT_lang_t lang_type, size_t *len);
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Utility functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+H5_HLDLL herr_t H5LTfind_attribute( hid_t loc_id, const char *name );
+
+H5_HLDLL htri_t H5LTpath_valid(hid_t loc_id, const char *path, hbool_t check_object_valid);
+
+/*-------------------------------------------------------------------------
+ *
+ * File image operations functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+H5_HLDLL hid_t H5LTopen_file_image(void *buf_ptr, size_t buf_size, unsigned flags);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
diff --git a/privatemodules/nc4/include/H5Lpublic.h b/privatemodules/nc4/include/H5Lpublic.h
new file mode 100644
index 0000000000000000000000000000000000000000..620d2e9b00cd40ee07a09c729eaf3b379ee00929
--- /dev/null
+++ b/privatemodules/nc4/include/H5Lpublic.h
@@ -0,0 +1,202 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*-------------------------------------------------------------------------
+ *
+ * Created:             H5Lpublic.h
+ *                      Dec 1 2005
+ *                      James Laird
+ *
+ * Purpose:             Public declarations for the H5L package (links)
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef _H5Lpublic_H
+#define _H5Lpublic_H
+
+/* Public headers needed by this file */
+#include "H5public.h"		/* Generic Functions			*/
+#include "H5Ipublic.h"		/* IDs			  		*/
+#include "H5Tpublic.h"		/* Datatypes				*/
+
+/*****************/
+/* Public Macros */
+/*****************/
+
+/* Maximum length of a link's name */
+/* (encoded in a 32-bit unsigned integer) */
+#define H5L_MAX_LINK_NAME_LEN   ((uint32_t)(-1))  /* (4GB - 1) */
+
+/* Macro to indicate operation occurs on same location */
+#define H5L_SAME_LOC 0
+
+/* Current version of the H5L_class_t struct */
+#define H5L_LINK_CLASS_T_VERS 0
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*******************/
+/* Public Typedefs */
+/*******************/
+
+/* Link class types.
+ * Values less than 64 are reserved for the HDF5 library's internal use.
+ * Values 64 to 255 are for "user-defined" link class types; these types are
+ * defined by HDF5 but their behavior can be overridden by users.
+ * Users who want to create new classes of links should contact the HDF5
+ * development team at hdfhelp@ncsa.uiuc.edu .
+ * These values can never change because they appear in HDF5 files.
+ */
+typedef enum {
+    H5L_TYPE_ERROR = (-1),      /* Invalid link type id         */
+    H5L_TYPE_HARD = 0,          /* Hard link id                 */
+    H5L_TYPE_SOFT = 1,          /* Soft link id                 */
+    H5L_TYPE_EXTERNAL = 64,     /* External link id             */
+    H5L_TYPE_MAX = 255	        /* Maximum link type id         */
+} H5L_type_t;
+#define H5L_TYPE_BUILTIN_MAX H5L_TYPE_SOFT      /* Maximum value link value for "built-in" link types */
+#define H5L_TYPE_UD_MIN      H5L_TYPE_EXTERNAL  /* Link ids at or above this value are "user-defined" link types. */
+
+/* Information struct for link (for H5Lget_info/H5Lget_info_by_idx) */
+typedef struct {
+    H5L_type_t          type;           /* Type of link                   */
+    hbool_t             corder_valid;   /* Indicate if creation order is valid */
+    int64_t             corder;         /* Creation order                 */
+    H5T_cset_t          cset;           /* Character set of link name     */
+    union {
+        haddr_t         address;        /* Address hard link points to    */
+        size_t          val_size;       /* Size of a soft link or UD link value */
+    } u;
+} H5L_info_t;
+
+/* The H5L_class_t struct can be used to override the behavior of a
+ * "user-defined" link class. Users should populate the struct with callback
+ * functions defined below.
+ */
+/* Callback prototypes for user-defined links */
+/* Link creation callback */
+typedef herr_t (*H5L_create_func_t)(const char *link_name, hid_t loc_group,
+    const void *lnkdata, size_t lnkdata_size, hid_t lcpl_id);
+
+/* Callback for when the link is moved */
+typedef herr_t (*H5L_move_func_t)(const char *new_name, hid_t new_loc,
+    const void *lnkdata, size_t lnkdata_size);
+
+/* Callback for when the link is copied */
+typedef herr_t (*H5L_copy_func_t)(const char *new_name, hid_t new_loc,
+    const void *lnkdata, size_t lnkdata_size);
+
+/* Callback during link traversal */
+typedef herr_t (*H5L_traverse_func_t)(const char *link_name, hid_t cur_group,
+    const void *lnkdata, size_t lnkdata_size, hid_t lapl_id);
+
+/* Callback for when the link is deleted */
+typedef herr_t (*H5L_delete_func_t)(const char *link_name, hid_t file,
+    const void *lnkdata, size_t lnkdata_size);
+
+/* Callback for querying the link */
+/* Returns the size of the buffer needed */
+typedef ssize_t (*H5L_query_func_t)(const char *link_name, const void *lnkdata,
+    size_t lnkdata_size, void *buf /*out*/, size_t buf_size);
+
+/* User-defined link types */
+typedef struct {
+    int version;                    /* Version number of this struct        */
+    H5L_type_t id;                  /* Link type ID                         */
+    const char *comment;            /* Comment for debugging                */
+    H5L_create_func_t create_func;  /* Callback during link creation        */
+    H5L_move_func_t move_func;      /* Callback after moving link           */
+    H5L_copy_func_t copy_func;      /* Callback after copying link          */
+    H5L_traverse_func_t trav_func;  /* Callback during link traversal       */
+    H5L_delete_func_t del_func;     /* Callback for link deletion           */
+    H5L_query_func_t query_func;    /* Callback for queries                 */
+} H5L_class_t;
+
+/* Prototype for H5Literate/H5Literate_by_name() operator */
+typedef herr_t (*H5L_iterate_t)(hid_t group, const char *name, const H5L_info_t *info,
+    void *op_data);
+
+/* Callback for external link traversal */
+typedef herr_t (*H5L_elink_traverse_t)(const char *parent_file_name,
+    const char *parent_group_name, const char *child_file_name,
+    const char *child_object_name, unsigned *acc_flags, hid_t fapl_id,
+    void *op_data);
+
+
+/********************/
+/* Public Variables */
+/********************/
+
+
+/*********************/
+/* Public Prototypes */
+/*********************/
+H5_DLL herr_t H5Lmove(hid_t src_loc, const char *src_name, hid_t dst_loc,
+    const char *dst_name, hid_t lcpl_id, hid_t lapl_id);
+H5_DLL herr_t H5Lcopy(hid_t src_loc, const char *src_name, hid_t dst_loc,
+    const char *dst_name, hid_t lcpl_id, hid_t lapl_id);
+H5_DLL herr_t H5Lcreate_hard(hid_t cur_loc, const char *cur_name,
+    hid_t dst_loc, const char *dst_name, hid_t lcpl_id, hid_t lapl_id);
+H5_DLL herr_t H5Lcreate_soft(const char *link_target, hid_t link_loc_id,
+    const char *link_name, hid_t lcpl_id, hid_t lapl_id);
+H5_DLL herr_t H5Ldelete(hid_t loc_id, const char *name, hid_t lapl_id);
+H5_DLL herr_t H5Ldelete_by_idx(hid_t loc_id, const char *group_name,
+    H5_index_t idx_type, H5_iter_order_t order, hsize_t n, hid_t lapl_id);
+H5_DLL herr_t H5Lget_val(hid_t loc_id, const char *name, void *buf/*out*/,
+    size_t size, hid_t lapl_id);
+H5_DLL herr_t H5Lget_val_by_idx(hid_t loc_id, const char *group_name,
+    H5_index_t idx_type, H5_iter_order_t order, hsize_t n,
+    void *buf/*out*/, size_t size, hid_t lapl_id);
+H5_DLL htri_t H5Lexists(hid_t loc_id, const char *name, hid_t lapl_id);
+H5_DLL herr_t H5Lget_info(hid_t loc_id, const char *name,
+    H5L_info_t *linfo /*out*/, hid_t lapl_id);
+H5_DLL herr_t H5Lget_info_by_idx(hid_t loc_id, const char *group_name,
+    H5_index_t idx_type, H5_iter_order_t order, hsize_t n,
+    H5L_info_t *linfo /*out*/, hid_t lapl_id);
+H5_DLL ssize_t H5Lget_name_by_idx(hid_t loc_id, const char *group_name,
+    H5_index_t idx_type, H5_iter_order_t order, hsize_t n,
+    char *name /*out*/, size_t size, hid_t lapl_id);
+H5_DLL herr_t H5Literate(hid_t grp_id, H5_index_t idx_type,
+    H5_iter_order_t order, hsize_t *idx, H5L_iterate_t op, void *op_data);
+H5_DLL herr_t H5Literate_by_name(hid_t loc_id, const char *group_name,
+    H5_index_t idx_type, H5_iter_order_t order, hsize_t *idx,
+    H5L_iterate_t op, void *op_data, hid_t lapl_id);
+H5_DLL herr_t H5Lvisit(hid_t grp_id, H5_index_t idx_type, H5_iter_order_t order,
+    H5L_iterate_t op, void *op_data);
+H5_DLL herr_t H5Lvisit_by_name(hid_t loc_id, const char *group_name,
+    H5_index_t idx_type, H5_iter_order_t order, H5L_iterate_t op,
+    void *op_data, hid_t lapl_id);
+
+/* UD link functions */
+H5_DLL herr_t H5Lcreate_ud(hid_t link_loc_id, const char *link_name,
+    H5L_type_t link_type, const void *udata, size_t udata_size, hid_t lcpl_id,
+    hid_t lapl_id);
+H5_DLL herr_t H5Lregister(const H5L_class_t *cls);
+H5_DLL herr_t H5Lunregister(H5L_type_t id);
+H5_DLL htri_t H5Lis_registered(H5L_type_t id);
+
+/* External link functions */
+H5_DLL herr_t H5Lunpack_elink_val(const void *ext_linkval/*in*/, size_t link_size,
+   unsigned *flags, const char **filename/*out*/, const char **obj_path /*out*/);
+H5_DLL herr_t H5Lcreate_external(const char *file_name, const char *obj_name,
+    hid_t link_loc_id, const char *link_name, hid_t lcpl_id, hid_t lapl_id);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* _H5Lpublic_H */
+
diff --git a/privatemodules/nc4/include/H5MMpublic.h b/privatemodules/nc4/include/H5MMpublic.h
new file mode 100644
index 0000000000000000000000000000000000000000..bfcb8073bbc0755b7e9dd557bd76b35bc5d0cf24
--- /dev/null
+++ b/privatemodules/nc4/include/H5MMpublic.h
@@ -0,0 +1,47 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*-------------------------------------------------------------------------
+ *
+ * Created:             H5MMproto.h
+ *                      Jul 10 1997
+ *                      Robb Matzke <matzke@llnl.gov>
+ *
+ * Purpose:             Public declarations for the H5MM (memory management)
+ *                      package.
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef _H5MMpublic_H
+#define _H5MMpublic_H
+
+/* Public headers needed by this file */
+#include "H5public.h"
+
+/* These typedefs are currently used for VL datatype allocation/freeing */
+typedef void *(*H5MM_allocate_t)(size_t size, void *alloc_info);
+typedef void (*H5MM_free_t)(void *mem, void *free_info);
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* _H5MMpublic_H */
+
diff --git a/privatemodules/nc4/include/H5Opublic.h b/privatemodules/nc4/include/H5Opublic.h
new file mode 100644
index 0000000000000000000000000000000000000000..32945e845ae81d3b7dae8fee424c250b1980ce7c
--- /dev/null
+++ b/privatemodules/nc4/include/H5Opublic.h
@@ -0,0 +1,212 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*-------------------------------------------------------------------------
+ *
+ * Created:             H5Opublic.h
+ *                      Aug  5 1997
+ *                      Robb Matzke <matzke@llnl.gov>
+ *
+ * Purpose:             Public declarations for the H5O (object header)
+ *                      package.
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef _H5Opublic_H
+#define _H5Opublic_H
+
+/* Public headers needed by this file */
+#include "H5public.h"		/* Generic Functions			*/
+#include "H5Ipublic.h"		/* IDs			  		*/
+#include "H5Lpublic.h"		/* Links		  		*/
+
+/*****************/
+/* Public Macros */
+/*****************/
+
+/* Flags for object copy (H5Ocopy) */
+#define H5O_COPY_SHALLOW_HIERARCHY_FLAG (0x0001u)   /* Copy only immediate members */
+#define H5O_COPY_EXPAND_SOFT_LINK_FLAG  (0x0002u)   /* Expand soft links into new objects */
+#define H5O_COPY_EXPAND_EXT_LINK_FLAG   (0x0004u)   /* Expand external links into new objects */
+#define H5O_COPY_EXPAND_REFERENCE_FLAG	(0x0008u)   /* Copy objects that are pointed by references */
+#define H5O_COPY_WITHOUT_ATTR_FLAG      (0x0010u)   /* Copy object without copying attributes */
+#define H5O_COPY_PRESERVE_NULL_FLAG     (0x0020u)   /* Copy NULL messages (empty space) */
+#define H5O_COPY_MERGE_COMMITTED_DTYPE_FLAG (0x0040u)   /* Merge committed datatypes in dest file */
+#define H5O_COPY_ALL                    (0x007Fu)   /* All object copying flags (for internal checking) */
+
+/* Flags for shared message indexes.
+ * Pass these flags in using the mesg_type_flags parameter in
+ * H5P_set_shared_mesg_index.
+ * (Developers: These flags correspond to object header message type IDs,
+ * but we need to assign each kind of message to a different bit so that
+ * one index can hold multiple types.)
+ */
+#define H5O_SHMESG_NONE_FLAG    0x0000          /* No shared messages */
+#define H5O_SHMESG_SDSPACE_FLAG ((unsigned)1 << 0x0001) /* Simple Dataspace Message.  */
+#define H5O_SHMESG_DTYPE_FLAG   ((unsigned)1 << 0x0003) /* Datatype Message.  */
+#define H5O_SHMESG_FILL_FLAG    ((unsigned)1 << 0x0005) /* Fill Value Message. */
+#define H5O_SHMESG_PLINE_FLAG   ((unsigned)1 << 0x000b) /* Filter pipeline message.  */
+#define H5O_SHMESG_ATTR_FLAG    ((unsigned)1 << 0x000c) /* Attribute Message.  */
+#define H5O_SHMESG_ALL_FLAG     (H5O_SHMESG_SDSPACE_FLAG | H5O_SHMESG_DTYPE_FLAG | H5O_SHMESG_FILL_FLAG | H5O_SHMESG_PLINE_FLAG | H5O_SHMESG_ATTR_FLAG)
+
+/* Object header status flag definitions */
+#define H5O_HDR_CHUNK0_SIZE             0x03    /* 2-bit field indicating # of bytes to store the size of chunk 0's data */
+#define H5O_HDR_ATTR_CRT_ORDER_TRACKED  0x04    /* Attribute creation order is tracked */
+#define H5O_HDR_ATTR_CRT_ORDER_INDEXED  0x08    /* Attribute creation order has index */
+#define H5O_HDR_ATTR_STORE_PHASE_CHANGE 0x10    /* Non-default attribute storage phase change values stored */
+#define H5O_HDR_STORE_TIMES             0x20    /* Store access, modification, change & birth times for object */
+#define H5O_HDR_ALL_FLAGS       (H5O_HDR_CHUNK0_SIZE | H5O_HDR_ATTR_CRT_ORDER_TRACKED | H5O_HDR_ATTR_CRT_ORDER_INDEXED | H5O_HDR_ATTR_STORE_PHASE_CHANGE | H5O_HDR_STORE_TIMES)
+
+/* Maximum shared message values.  Number of indexes is 8 to allow room to add
+ * new types of messages.
+ */
+#define H5O_SHMESG_MAX_NINDEXES 8
+#define H5O_SHMESG_MAX_LIST_SIZE 5000
+
+/*******************/
+/* Public Typedefs */
+/*******************/
+
+/* Types of objects in file */
+typedef enum H5O_type_t {
+    H5O_TYPE_UNKNOWN = -1,	/* Unknown object type		*/
+    H5O_TYPE_GROUP,	        /* Object is a group		*/
+    H5O_TYPE_DATASET,		/* Object is a dataset		*/
+    H5O_TYPE_NAMED_DATATYPE, 	/* Object is a named data type	*/
+    H5O_TYPE_NTYPES             /* Number of different object types (must be last!) */
+} H5O_type_t;
+
+/* Information struct for object header metadata (for H5Oget_info/H5Oget_info_by_name/H5Oget_info_by_idx) */
+typedef struct H5O_hdr_info_t {
+    unsigned version;		/* Version number of header format in file */
+    unsigned nmesgs;		/* Number of object header messages */
+    unsigned nchunks;		/* Number of object header chunks */
+    unsigned flags;             /* Object header status flags */
+    struct {
+        hsize_t total;		/* Total space for storing object header in file */
+        hsize_t meta;		/* Space within header for object header metadata information */
+        hsize_t mesg;		/* Space within header for actual message information */
+        hsize_t free;		/* Free space within object header */
+    } space;
+    struct {
+        uint64_t present;	/* Flags to indicate presence of message type in header */
+        uint64_t shared;	/* Flags to indicate message type is shared in header */
+    } mesg;
+} H5O_hdr_info_t;
+
+/* Information struct for object (for H5Oget_info/H5Oget_info_by_name/H5Oget_info_by_idx) */
+typedef struct H5O_info_t {
+    unsigned long 	fileno;		/* File number that object is located in */
+    haddr_t 		addr;		/* Object address in file	*/
+    H5O_type_t 		type;		/* Basic object type (group, dataset, etc.) */
+    unsigned 		rc;		/* Reference count of object    */
+    time_t		atime;		/* Access time			*/
+    time_t		mtime;		/* Modification time		*/
+    time_t		ctime;		/* Change time			*/
+    time_t		btime;		/* Birth time			*/
+    hsize_t 		num_attrs;	/* # of attributes attached to object */
+    H5O_hdr_info_t      hdr;            /* Object header information */
+    /* Extra metadata storage for obj & attributes */
+    struct {
+        H5_ih_info_t   obj;             /* v1/v2 B-tree & local/fractal heap for groups, B-tree for chunked datasets */
+        H5_ih_info_t   attr;            /* v2 B-tree & heap for attributes */
+    } meta_size;
+} H5O_info_t;
+
+/* Typedef for message creation indexes */
+typedef uint32_t H5O_msg_crt_idx_t;
+
+/* Prototype for H5Ovisit/H5Ovisit_by_name() operator */
+typedef herr_t (*H5O_iterate_t)(hid_t obj, const char *name, const H5O_info_t *info,
+    void *op_data);
+
+typedef enum H5O_mcdt_search_ret_t {
+    H5O_MCDT_SEARCH_ERROR = -1,	/* Abort H5Ocopy */
+    H5O_MCDT_SEARCH_CONT,	/* Continue the global search of all committed datatypes in the destination file */
+    H5O_MCDT_SEARCH_STOP	/* Stop the search, but continue copying.  The committed datatype will be copied but not merged. */
+} H5O_mcdt_search_ret_t;
+
+/* Callback to invoke when completing the search for a matching committed datatype from the committed dtype list */
+typedef H5O_mcdt_search_ret_t (*H5O_mcdt_search_cb_t)(void *op_data);
+
+/********************/
+/* Public Variables */
+/********************/
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************/
+/* Public Prototypes */
+/*********************/
+H5_DLL hid_t H5Oopen(hid_t loc_id, const char *name, hid_t lapl_id);
+H5_DLL hid_t H5Oopen_by_addr(hid_t loc_id, haddr_t addr);
+H5_DLL hid_t H5Oopen_by_idx(hid_t loc_id, const char *group_name,
+    H5_index_t idx_type, H5_iter_order_t order, hsize_t n, hid_t lapl_id);
+H5_DLL htri_t H5Oexists_by_name(hid_t loc_id, const char *name, hid_t lapl_id);
+H5_DLL herr_t H5Oget_info(hid_t loc_id, H5O_info_t *oinfo);
+H5_DLL herr_t H5Oget_info_by_name(hid_t loc_id, const char *name, H5O_info_t *oinfo,
+    hid_t lapl_id);
+H5_DLL herr_t H5Oget_info_by_idx(hid_t loc_id, const char *group_name,
+    H5_index_t idx_type, H5_iter_order_t order, hsize_t n, H5O_info_t *oinfo,
+    hid_t lapl_id);
+H5_DLL herr_t H5Olink(hid_t obj_id, hid_t new_loc_id, const char *new_name,
+    hid_t lcpl_id, hid_t lapl_id);
+H5_DLL herr_t H5Oincr_refcount(hid_t object_id);
+H5_DLL herr_t H5Odecr_refcount(hid_t object_id);
+H5_DLL herr_t H5Ocopy(hid_t src_loc_id, const char *src_name, hid_t dst_loc_id,
+    const char *dst_name, hid_t ocpypl_id, hid_t lcpl_id);
+H5_DLL herr_t H5Oset_comment(hid_t obj_id, const char *comment);
+H5_DLL herr_t H5Oset_comment_by_name(hid_t loc_id, const char *name,
+    const char *comment, hid_t lapl_id);
+H5_DLL ssize_t H5Oget_comment(hid_t obj_id, char *comment, size_t bufsize);
+H5_DLL ssize_t H5Oget_comment_by_name(hid_t loc_id, const char *name,
+    char *comment, size_t bufsize, hid_t lapl_id);
+H5_DLL herr_t H5Ovisit(hid_t obj_id, H5_index_t idx_type, H5_iter_order_t order,
+    H5O_iterate_t op, void *op_data);
+H5_DLL herr_t H5Ovisit_by_name(hid_t loc_id, const char *obj_name,
+    H5_index_t idx_type, H5_iter_order_t order, H5O_iterate_t op,
+    void *op_data, hid_t lapl_id);
+H5_DLL herr_t H5Oclose(hid_t object_id);
+
+/* Symbols defined for compatibility with previous versions of the HDF5 API.
+ *
+ * Use of these symbols is deprecated.
+ */
+#ifndef H5_NO_DEPRECATED_SYMBOLS
+
+/* Macros */
+
+/* Typedefs */
+
+/* A struct that's part of the H5G_stat_t routine (deprecated) */
+typedef struct H5O_stat_t {
+    hsize_t size;               /* Total size of object header in file */
+    hsize_t free;               /* Free space within object header */
+    unsigned nmesgs;            /* Number of object header messages */
+    unsigned nchunks;           /* Number of object header chunks */
+} H5O_stat_t;
+
+/* Function prototypes */
+
+#endif /* H5_NO_DEPRECATED_SYMBOLS */
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* _H5Opublic_H */
+
diff --git a/privatemodules/nc4/include/H5PLextern.h b/privatemodules/nc4/include/H5PLextern.h
new file mode 100644
index 0000000000000000000000000000000000000000..f94101d818a1cda5e73635651f6c5c98f5ccaff8
--- /dev/null
+++ b/privatemodules/nc4/include/H5PLextern.h
@@ -0,0 +1,87 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5. The full HDF5 copyright notice, including      *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic document set and is     *
+ * linked from the top-level documents page.  It can also be found at        *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have access   *
+ * to either file, you may request a copy from help@hdfgroup.org.            *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Raymond Lu <songyulu@hdfgroup.org>
+ *              13 February 2013
+ */
+#ifndef _H5PLextern_H
+#define _H5PLextern_H
+
+/* Include HDF5 header */
+#include "hdf5.h"
+
+#ifndef H5_VMS
+
+/*******************/
+/* Public Typedefs */
+/*******************/
+
+/* Plugin type */
+typedef enum H5PL_type_t {
+    H5PL_TYPE_ERROR        = -1,  /*error                    */
+    H5PL_TYPE_FILTER       = 0,   /*filter                   */
+    H5PL_TYPE_NONE         = 1    /*this must be last!       */
+} H5PL_type_t;
+
+
+#ifdef H5_BUILT_AS_DYNAMIC_LIB
+
+  #if defined (hdf5_EXPORTS)
+    /* hdf5 library imports from plugin */
+    #if defined (_MSC_VER)  /* MSVC Compiler Case */
+      #define H5PLUGIN_DLL __declspec(dllimport)
+    #elif (__GNUC__ >= 4)  /* GCC 4.x has support for visibility options */
+      #define H5PLUGIN_DLL __attribute__ ((visibility("default")))
+    #endif
+  #else
+    /* plugins always export */
+    #if defined (_MSC_VER)  /* MSVC Compiler Case */
+      #define H5PLUGIN_DLL __declspec(dllexport)
+    #elif (__GNUC__ >= 4)  /* GCC 4.x has support for visibility options */
+      #define H5PLUGIN_DLL __attribute__ ((visibility("default")))
+    #endif
+  #endif
+
+#elif defined(H5_BUILT_AS_STATIC_LIB)
+  #define H5PLUGIN_DLL
+#else
+
+  #if defined(H5_HAVE_WIN32_API)
+    #if defined(_HDF5DLL_)
+      #pragma warning(disable: 4273)  /* Disable the dll linkage warnings */
+      #define H5PLUGIN_DLL __declspec(dllimport)
+    #elif defined(_HDF5USEDLL_)
+      #define H5PLUGIN_DLL __declspec(dllexport)
+    #endif /* _HDF5DLL_ */
+  #else /*H5_HAVE_WIN32_API*/
+    #define H5PLUGIN_DLL
+  #endif /*H5_HAVE_WIN32_API*/
+
+#endif /* H5_BUILT_AS_xxx_LIB */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+H5PLUGIN_DLL H5PL_type_t H5PLget_plugin_type(void);
+H5PLUGIN_DLL const void *H5PLget_plugin_info(void);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*H5_VMS*/
+
+#endif /* _H5PLextern_H */
+
diff --git a/privatemodules/nc4/include/H5PTpublic.h b/privatemodules/nc4/include/H5PTpublic.h
new file mode 100644
index 0000000000000000000000000000000000000000..f919010591917cb356bf08c99381368bc848d444
--- /dev/null
+++ b/privatemodules/nc4/include/H5PTpublic.h
@@ -0,0 +1,127 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef _H5PTpublic_H
+#define _H5PTpublic_H
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*-------------------------------------------------------------------------
+ *
+ * Create/Open/Close functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+H5_HLDLL hid_t H5PTcreate_fl ( hid_t loc_id,
+                      const char *dset_name,
+                      hid_t dtype_id,
+                      hsize_t chunk_size,
+                      int compression );
+
+#ifdef VLPT_REMOVED
+H5_HLDLL hid_t H5PTcreate_vl ( hid_t loc_id,
+                      const char *dset_name,
+                      hsize_t chunk_size );
+#endif /* VLPT_REMOVED */
+
+H5_HLDLL hid_t H5PTopen( hid_t loc_id,
+                const char *dset_name );
+
+H5_HLDLL herr_t  H5PTclose( hid_t table_id );
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Write functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+H5_HLDLL herr_t  H5PTappend( hid_t table_id,
+                   size_t nrecords,
+                   const void * data );
+
+/*-------------------------------------------------------------------------
+ *
+ * Read functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+H5_HLDLL herr_t  H5PTget_next( hid_t table_id,
+                     size_t nrecords,
+                     void * data );
+
+H5_HLDLL herr_t  H5PTread_packets( hid_t table_id,
+                         hsize_t start,
+                         size_t nrecords,
+                         void *data );
+
+/*-------------------------------------------------------------------------
+ *
+ * Inquiry functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+H5_HLDLL herr_t  H5PTget_num_packets( hid_t table_id,
+                            hsize_t *nrecords );
+
+H5_HLDLL herr_t  H5PTis_valid( hid_t table_id );
+
+#ifdef VLPT_REMOVED
+H5_HLDLL herr_t  H5PTis_varlen( hid_t table_id );
+#endif /* VLPT_REMOVED */
+
+/*-------------------------------------------------------------------------
+ *
+ * Packet Table "current index" functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+H5_HLDLL herr_t  H5PTcreate_index( hid_t table_id );
+
+H5_HLDLL herr_t  H5PTset_index( hid_t table_id,
+                             hsize_t pt_index );
+
+H5_HLDLL herr_t  H5PTget_index( hid_t table_id,
+                             hsize_t *pt_index );
+
+/*-------------------------------------------------------------------------
+ *
+ * Memory Management functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#ifdef VLPT_REMOVED
+H5_HLDLL herr_t  H5PTfree_vlen_readbuff( hid_t table_id,
+                               size_t bufflen,
+                               void * buff );
+#endif /* VLPT_REMOVED */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
diff --git a/privatemodules/nc4/include/H5Ppublic.h b/privatemodules/nc4/include/H5Ppublic.h
new file mode 100644
index 0000000000000000000000000000000000000000..1d8ced44c023d4c8b5ee6ddc1aa5af9e91b03667
--- /dev/null
+++ b/privatemodules/nc4/include/H5Ppublic.h
@@ -0,0 +1,495 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * This file contains function prototypes for each exported function in the
+ * H5P module.
+ */
+#ifndef _H5Ppublic_H
+#define _H5Ppublic_H
+
+/* System headers needed by this file */
+
+/* Public headers needed by this file */
+#include "H5public.h"
+#include "H5ACpublic.h"
+#include "H5Dpublic.h"
+#include "H5Fpublic.h"
+#include "H5FDpublic.h"
+#include "H5Ipublic.h"
+#include "H5Lpublic.h"
+#include "H5Opublic.h"
+#include "H5MMpublic.h"
+#include "H5Tpublic.h"
+#include "H5Zpublic.h"
+
+
+/*****************/
+/* Public Macros */
+/*****************/
+
+/* When this header is included from a private HDF5 header, don't make calls to H5open() */
+#undef H5OPEN
+#ifndef _H5private_H
+#define H5OPEN        H5open(),
+#else   /* _H5private_H */
+#define H5OPEN
+#endif  /* _H5private_H */
+
+/*
+ * The library's property list classes
+ */
+
+#define H5P_ROOT		   	(H5OPEN H5P_CLS_ROOT_g)
+#define H5P_OBJECT_CREATE 		(H5OPEN H5P_CLS_OBJECT_CREATE_g)
+#define H5P_FILE_CREATE 		(H5OPEN H5P_CLS_FILE_CREATE_g)
+#define H5P_FILE_ACCESS 		(H5OPEN H5P_CLS_FILE_ACCESS_g)
+#define H5P_DATASET_CREATE     		(H5OPEN H5P_CLS_DATASET_CREATE_g)
+#define H5P_DATASET_ACCESS     		(H5OPEN H5P_CLS_DATASET_ACCESS_g)
+#define H5P_DATASET_XFER       		(H5OPEN H5P_CLS_DATASET_XFER_g)
+#define H5P_FILE_MOUNT       		(H5OPEN H5P_CLS_FILE_MOUNT_g)
+#define H5P_GROUP_CREATE 		(H5OPEN H5P_CLS_GROUP_CREATE_g)
+#define H5P_GROUP_ACCESS 		(H5OPEN H5P_CLS_GROUP_ACCESS_g)
+#define H5P_DATATYPE_CREATE 		(H5OPEN H5P_CLS_DATATYPE_CREATE_g)
+#define H5P_DATATYPE_ACCESS 		(H5OPEN H5P_CLS_DATATYPE_ACCESS_g)
+#define H5P_STRING_CREATE 		(H5OPEN H5P_CLS_STRING_CREATE_g)
+#define H5P_ATTRIBUTE_CREATE 		(H5OPEN H5P_CLS_ATTRIBUTE_CREATE_g)
+#define H5P_OBJECT_COPY	 		(H5OPEN H5P_CLS_OBJECT_COPY_g)
+#define H5P_LINK_CREATE 		(H5OPEN H5P_CLS_LINK_CREATE_g)
+#define H5P_LINK_ACCESS 		(H5OPEN H5P_CLS_LINK_ACCESS_g)
+
+/*
+ * The library's default property lists
+ */
+#define H5P_FILE_CREATE_DEFAULT		(H5OPEN H5P_LST_FILE_CREATE_g)
+#define H5P_FILE_ACCESS_DEFAULT 	(H5OPEN H5P_LST_FILE_ACCESS_g)
+#define H5P_DATASET_CREATE_DEFAULT  	(H5OPEN H5P_LST_DATASET_CREATE_g)
+#define H5P_DATASET_ACCESS_DEFAULT  	(H5OPEN H5P_LST_DATASET_ACCESS_g)
+#define H5P_DATASET_XFER_DEFAULT   	(H5OPEN H5P_LST_DATASET_XFER_g)
+#define H5P_FILE_MOUNT_DEFAULT       	(H5OPEN H5P_LST_FILE_MOUNT_g)
+#define H5P_GROUP_CREATE_DEFAULT	(H5OPEN H5P_LST_GROUP_CREATE_g)
+#define H5P_GROUP_ACCESS_DEFAULT 	(H5OPEN H5P_LST_GROUP_ACCESS_g)
+#define H5P_DATATYPE_CREATE_DEFAULT	(H5OPEN H5P_LST_DATATYPE_CREATE_g)
+#define H5P_DATATYPE_ACCESS_DEFAULT 	(H5OPEN H5P_LST_DATATYPE_ACCESS_g)
+#define H5P_ATTRIBUTE_CREATE_DEFAULT	(H5OPEN H5P_LST_ATTRIBUTE_CREATE_g)
+#define H5P_OBJECT_COPY_DEFAULT		(H5OPEN H5P_LST_OBJECT_COPY_g)
+#define H5P_LINK_CREATE_DEFAULT		(H5OPEN H5P_LST_LINK_CREATE_g)
+#define H5P_LINK_ACCESS_DEFAULT		(H5OPEN H5P_LST_LINK_ACCESS_g)
+
+/* Common creation order flags (for links in groups and attributes on objects) */
+#define H5P_CRT_ORDER_TRACKED           0x0001
+#define H5P_CRT_ORDER_INDEXED           0x0002
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*******************/
+/* Public Typedefs */
+/*******************/
+
+
+/* Define property list class callback function pointer types */
+typedef herr_t (*H5P_cls_create_func_t)(hid_t prop_id, void *create_data);
+typedef herr_t (*H5P_cls_copy_func_t)(hid_t new_prop_id, hid_t old_prop_id,
+                                      void *copy_data);
+typedef herr_t (*H5P_cls_close_func_t)(hid_t prop_id, void *close_data);
+
+/* Define property list callback function pointer types */
+typedef herr_t (*H5P_prp_cb1_t)(const char *name, size_t size, void *value);
+typedef herr_t (*H5P_prp_cb2_t)(hid_t prop_id, const char *name, size_t size, void *value);
+typedef H5P_prp_cb1_t H5P_prp_create_func_t;
+typedef H5P_prp_cb2_t H5P_prp_set_func_t;
+typedef H5P_prp_cb2_t H5P_prp_get_func_t;
+typedef H5P_prp_cb2_t H5P_prp_delete_func_t;
+typedef H5P_prp_cb1_t H5P_prp_copy_func_t;
+typedef int (*H5P_prp_compare_func_t)(const void *value1, const void *value2, size_t size);
+typedef H5P_prp_cb1_t H5P_prp_close_func_t;
+
+/* Define property list iteration function type */
+typedef herr_t (*H5P_iterate_t)(hid_t id, const char *name, void *iter_data);
+
+/* Actual IO mode property */
+typedef enum H5D_mpio_actual_chunk_opt_mode_t {
+    /* The default value, H5D_MPIO_NO_CHUNK_OPTIMIZATION, is used for all I/O
+     * operations that do not use chunk optimizations, including non-collective
+     * I/O and contiguous collective I/O.
+     */
+    H5D_MPIO_NO_CHUNK_OPTIMIZATION = 0,
+    H5D_MPIO_LINK_CHUNK,
+    H5D_MPIO_MULTI_CHUNK
+}  H5D_mpio_actual_chunk_opt_mode_t;
+
+typedef enum H5D_mpio_actual_io_mode_t {
+    /* The following four values are conveniently defined as a bit field so that
+     * we can switch from the default to indpendent or collective and then to
+     * mixed without having to check the original value. 
+     * 
+     * NO_COLLECTIVE means that either collective I/O wasn't requested or that 
+     * no I/O took place.
+     *
+     * CHUNK_INDEPENDENT means that collective I/O was requested, but the
+     * chunk optimization scheme chose independent I/O for each chunk.
+     */
+    H5D_MPIO_NO_COLLECTIVE = 0x0,
+    H5D_MPIO_CHUNK_INDEPENDENT = 0x1,
+    H5D_MPIO_CHUNK_COLLECTIVE = 0x2,
+    H5D_MPIO_CHUNK_MIXED = 0x1 | 0x2,
+
+    /* The contiguous case is separate from the bit field. */
+    H5D_MPIO_CONTIGUOUS_COLLECTIVE = 0x4
+} H5D_mpio_actual_io_mode_t; 
+
+/* Broken collective IO property */
+typedef enum H5D_mpio_no_collective_cause_t {
+    H5D_MPIO_COLLECTIVE = 0x00,
+    H5D_MPIO_SET_INDEPENDENT = 0x01,
+    H5D_MPIO_DATATYPE_CONVERSION = 0x02,
+    H5D_MPIO_DATA_TRANSFORMS = 0x04,
+    H5D_MPIO_MPI_OPT_TYPES_ENV_VAR_DISABLED = 0x08,
+    H5D_MPIO_NOT_SIMPLE_OR_SCALAR_DATASPACES = 0x10,
+    H5D_MPIO_NOT_CONTIGUOUS_OR_CHUNKED_DATASET = 0x20,
+    H5D_MPIO_FILTERS = 0x40
+} H5D_mpio_no_collective_cause_t;
+
+/********************/
+/* Public Variables */
+/********************/
+
+/* Property list class IDs */
+/* (Internal to library, do not use!  Use macros above) */
+H5_DLLVAR hid_t H5P_CLS_ROOT_g;
+H5_DLLVAR hid_t H5P_CLS_OBJECT_CREATE_g;
+H5_DLLVAR hid_t H5P_CLS_FILE_CREATE_g;
+H5_DLLVAR hid_t H5P_CLS_FILE_ACCESS_g;
+H5_DLLVAR hid_t H5P_CLS_DATASET_CREATE_g;
+H5_DLLVAR hid_t H5P_CLS_DATASET_ACCESS_g;
+H5_DLLVAR hid_t H5P_CLS_DATASET_XFER_g;
+H5_DLLVAR hid_t H5P_CLS_FILE_MOUNT_g;
+H5_DLLVAR hid_t H5P_CLS_GROUP_CREATE_g;
+H5_DLLVAR hid_t H5P_CLS_GROUP_ACCESS_g;
+H5_DLLVAR hid_t H5P_CLS_DATATYPE_CREATE_g;
+H5_DLLVAR hid_t H5P_CLS_DATATYPE_ACCESS_g;
+H5_DLLVAR hid_t H5P_CLS_STRING_CREATE_g;
+H5_DLLVAR hid_t H5P_CLS_ATTRIBUTE_CREATE_g;
+H5_DLLVAR hid_t H5P_CLS_OBJECT_COPY_g;
+H5_DLLVAR hid_t H5P_CLS_LINK_CREATE_g;
+H5_DLLVAR hid_t H5P_CLS_LINK_ACCESS_g;
+
+/* Default roperty list IDs */
+/* (Internal to library, do not use!  Use macros above) */
+H5_DLLVAR hid_t H5P_LST_FILE_CREATE_g;
+H5_DLLVAR hid_t H5P_LST_FILE_ACCESS_g;
+H5_DLLVAR hid_t H5P_LST_DATASET_CREATE_g;
+H5_DLLVAR hid_t H5P_LST_DATASET_ACCESS_g;
+H5_DLLVAR hid_t H5P_LST_DATASET_XFER_g;
+H5_DLLVAR hid_t H5P_LST_FILE_MOUNT_g;
+H5_DLLVAR hid_t H5P_LST_GROUP_CREATE_g;
+H5_DLLVAR hid_t H5P_LST_GROUP_ACCESS_g;
+H5_DLLVAR hid_t H5P_LST_DATATYPE_CREATE_g;
+H5_DLLVAR hid_t H5P_LST_DATATYPE_ACCESS_g;
+H5_DLLVAR hid_t H5P_LST_ATTRIBUTE_CREATE_g;
+H5_DLLVAR hid_t H5P_LST_OBJECT_COPY_g;
+H5_DLLVAR hid_t H5P_LST_LINK_CREATE_g;
+H5_DLLVAR hid_t H5P_LST_LINK_ACCESS_g;
+
+/*********************/
+/* Public Prototypes */
+/*********************/
+
+/* Generic property list routines */
+H5_DLL hid_t H5Pcreate_class(hid_t parent, const char *name,
+    H5P_cls_create_func_t cls_create, void *create_data,
+    H5P_cls_copy_func_t cls_copy, void *copy_data,
+    H5P_cls_close_func_t cls_close, void *close_data);
+H5_DLL char *H5Pget_class_name(hid_t pclass_id);
+H5_DLL hid_t H5Pcreate(hid_t cls_id);
+H5_DLL herr_t H5Pregister2(hid_t cls_id, const char *name, size_t size,
+    void *def_value, H5P_prp_create_func_t prp_create,
+    H5P_prp_set_func_t prp_set, H5P_prp_get_func_t prp_get,
+    H5P_prp_delete_func_t prp_del, H5P_prp_copy_func_t prp_copy,
+    H5P_prp_compare_func_t prp_cmp, H5P_prp_close_func_t prp_close);
+H5_DLL herr_t H5Pinsert2(hid_t plist_id, const char *name, size_t size,
+    void *value, H5P_prp_set_func_t prp_set, H5P_prp_get_func_t prp_get,
+    H5P_prp_delete_func_t prp_delete, H5P_prp_copy_func_t prp_copy,
+    H5P_prp_compare_func_t prp_cmp, H5P_prp_close_func_t prp_close);
+H5_DLL herr_t H5Pset(hid_t plist_id, const char *name, void *value);
+H5_DLL htri_t H5Pexist(hid_t plist_id, const char *name);
+H5_DLL herr_t H5Pget_size(hid_t id, const char *name, size_t *size);
+H5_DLL herr_t H5Pget_nprops(hid_t id, size_t *nprops);
+H5_DLL hid_t H5Pget_class(hid_t plist_id);
+H5_DLL hid_t H5Pget_class_parent(hid_t pclass_id);
+H5_DLL herr_t H5Pget(hid_t plist_id, const char *name, void * value);
+H5_DLL htri_t H5Pequal(hid_t id1, hid_t id2);
+H5_DLL htri_t H5Pisa_class(hid_t plist_id, hid_t pclass_id);
+H5_DLL int H5Piterate(hid_t id, int *idx, H5P_iterate_t iter_func,
+            void *iter_data);
+H5_DLL herr_t H5Pcopy_prop(hid_t dst_id, hid_t src_id, const char *name);
+H5_DLL herr_t H5Premove(hid_t plist_id, const char *name);
+H5_DLL herr_t H5Punregister(hid_t pclass_id, const char *name);
+H5_DLL herr_t H5Pclose_class(hid_t plist_id);
+H5_DLL herr_t H5Pclose(hid_t plist_id);
+H5_DLL hid_t H5Pcopy(hid_t plist_id);
+
+/* Object creation property list (OCPL) routines */
+H5_DLL herr_t H5Pset_attr_phase_change(hid_t plist_id, unsigned max_compact, unsigned min_dense);
+H5_DLL herr_t H5Pget_attr_phase_change(hid_t plist_id, unsigned *max_compact, unsigned *min_dense);
+H5_DLL herr_t H5Pset_attr_creation_order(hid_t plist_id, unsigned crt_order_flags);
+H5_DLL herr_t H5Pget_attr_creation_order(hid_t plist_id, unsigned *crt_order_flags);
+H5_DLL herr_t H5Pset_obj_track_times(hid_t plist_id, hbool_t track_times);
+H5_DLL herr_t H5Pget_obj_track_times(hid_t plist_id, hbool_t *track_times);
+H5_DLL herr_t H5Pmodify_filter(hid_t plist_id, H5Z_filter_t filter,
+        unsigned int flags, size_t cd_nelmts,
+        const unsigned int cd_values[/*cd_nelmts*/]);
+H5_DLL herr_t H5Pset_filter(hid_t plist_id, H5Z_filter_t filter,
+        unsigned int flags, size_t cd_nelmts,
+        const unsigned int c_values[]);
+H5_DLL int H5Pget_nfilters(hid_t plist_id);
+H5_DLL H5Z_filter_t H5Pget_filter2(hid_t plist_id, unsigned filter,
+       unsigned int *flags/*out*/,
+       size_t *cd_nelmts/*out*/,
+       unsigned cd_values[]/*out*/,
+       size_t namelen, char name[],
+       unsigned *filter_config /*out*/);
+H5_DLL herr_t H5Pget_filter_by_id2(hid_t plist_id, H5Z_filter_t id,
+       unsigned int *flags/*out*/, size_t *cd_nelmts/*out*/,
+       unsigned cd_values[]/*out*/, size_t namelen, char name[]/*out*/,
+       unsigned *filter_config/*out*/);
+H5_DLL htri_t H5Pall_filters_avail(hid_t plist_id);
+H5_DLL herr_t H5Premove_filter(hid_t plist_id, H5Z_filter_t filter);
+H5_DLL herr_t H5Pset_deflate(hid_t plist_id, unsigned aggression);
+H5_DLL herr_t H5Pset_fletcher32(hid_t plist_id);
+
+/* File creation property list (FCPL) routines */
+H5_DLL herr_t H5Pget_version(hid_t plist_id, unsigned *boot/*out*/,
+         unsigned *freelist/*out*/, unsigned *stab/*out*/,
+         unsigned *shhdr/*out*/);
+H5_DLL herr_t H5Pset_userblock(hid_t plist_id, hsize_t size);
+H5_DLL herr_t H5Pget_userblock(hid_t plist_id, hsize_t *size);
+H5_DLL herr_t H5Pset_sizes(hid_t plist_id, size_t sizeof_addr,
+       size_t sizeof_size);
+H5_DLL herr_t H5Pget_sizes(hid_t plist_id, size_t *sizeof_addr/*out*/,
+       size_t *sizeof_size/*out*/);
+H5_DLL herr_t H5Pset_sym_k(hid_t plist_id, unsigned ik, unsigned lk);
+H5_DLL herr_t H5Pget_sym_k(hid_t plist_id, unsigned *ik/*out*/, unsigned *lk/*out*/);
+H5_DLL herr_t H5Pset_istore_k(hid_t plist_id, unsigned ik);
+H5_DLL herr_t H5Pget_istore_k(hid_t plist_id, unsigned *ik/*out*/);
+H5_DLL herr_t H5Pset_shared_mesg_nindexes(hid_t plist_id, unsigned nindexes);
+H5_DLL herr_t H5Pget_shared_mesg_nindexes(hid_t plist_id, unsigned *nindexes);
+H5_DLL herr_t H5Pset_shared_mesg_index(hid_t plist_id, unsigned index_num, unsigned mesg_type_flags, unsigned min_mesg_size);
+H5_DLL herr_t H5Pget_shared_mesg_index(hid_t plist_id, unsigned index_num, unsigned *mesg_type_flags, unsigned *min_mesg_size);
+H5_DLL herr_t H5Pset_shared_mesg_phase_change(hid_t plist_id, unsigned max_list, unsigned min_btree);
+H5_DLL herr_t H5Pget_shared_mesg_phase_change(hid_t plist_id, unsigned *max_list, unsigned *min_btree);
+
+/* File access property list (FAPL) routines */
+H5_DLL herr_t H5Pset_alignment(hid_t fapl_id, hsize_t threshold,
+    hsize_t alignment);
+H5_DLL herr_t H5Pget_alignment(hid_t fapl_id, hsize_t *threshold/*out*/,
+    hsize_t *alignment/*out*/);
+H5_DLL herr_t H5Pset_driver(hid_t plist_id, hid_t driver_id,
+        const void *driver_info);
+H5_DLL hid_t H5Pget_driver(hid_t plist_id);
+H5_DLL void *H5Pget_driver_info(hid_t plist_id);
+H5_DLL herr_t H5Pset_family_offset(hid_t fapl_id, hsize_t offset);
+H5_DLL herr_t H5Pget_family_offset(hid_t fapl_id, hsize_t *offset);
+H5_DLL herr_t H5Pset_multi_type(hid_t fapl_id, H5FD_mem_t type);
+H5_DLL herr_t H5Pget_multi_type(hid_t fapl_id, H5FD_mem_t *type);
+H5_DLL herr_t H5Pset_cache(hid_t plist_id, int mdc_nelmts,
+       size_t rdcc_nslots, size_t rdcc_nbytes,
+       double rdcc_w0);
+H5_DLL herr_t H5Pget_cache(hid_t plist_id,
+       int *mdc_nelmts, /* out */
+       size_t *rdcc_nslots/*out*/,
+       size_t *rdcc_nbytes/*out*/, double *rdcc_w0);
+H5_DLL herr_t H5Pset_mdc_config(hid_t    plist_id,
+       H5AC_cache_config_t * config_ptr);
+H5_DLL herr_t H5Pget_mdc_config(hid_t     plist_id,
+       H5AC_cache_config_t * config_ptr);	/* out */
+H5_DLL herr_t H5Pset_gc_references(hid_t fapl_id, unsigned gc_ref);
+H5_DLL herr_t H5Pget_gc_references(hid_t fapl_id, unsigned *gc_ref/*out*/);
+H5_DLL herr_t H5Pset_fclose_degree(hid_t fapl_id, H5F_close_degree_t degree);
+H5_DLL herr_t H5Pget_fclose_degree(hid_t fapl_id, H5F_close_degree_t *degree);
+H5_DLL herr_t H5Pset_meta_block_size(hid_t fapl_id, hsize_t size);
+H5_DLL herr_t H5Pget_meta_block_size(hid_t fapl_id, hsize_t *size/*out*/);
+H5_DLL herr_t H5Pset_sieve_buf_size(hid_t fapl_id, size_t size);
+H5_DLL herr_t H5Pget_sieve_buf_size(hid_t fapl_id, size_t *size/*out*/);
+H5_DLL herr_t H5Pset_small_data_block_size(hid_t fapl_id, hsize_t size);
+H5_DLL herr_t H5Pget_small_data_block_size(hid_t fapl_id, hsize_t *size/*out*/);
+H5_DLL herr_t H5Pset_libver_bounds(hid_t plist_id, H5F_libver_t low,
+    H5F_libver_t high);
+H5_DLL herr_t H5Pget_libver_bounds(hid_t plist_id, H5F_libver_t *low,
+    H5F_libver_t *high);
+H5_DLL herr_t H5Pset_elink_file_cache_size(hid_t plist_id, unsigned efc_size);
+H5_DLL herr_t H5Pget_elink_file_cache_size(hid_t plist_id, unsigned *efc_size);
+H5_DLL herr_t H5Pset_file_image(hid_t fapl_id, void *buf_ptr, size_t buf_len);
+H5_DLL herr_t H5Pget_file_image(hid_t fapl_id, void **buf_ptr_ptr, size_t *buf_len_ptr);
+H5_DLL herr_t H5Pset_file_image_callbacks(hid_t fapl_id,
+       H5FD_file_image_callbacks_t *callbacks_ptr);
+H5_DLL herr_t H5Pget_file_image_callbacks(hid_t fapl_id,
+       H5FD_file_image_callbacks_t *callbacks_ptr);
+
+H5_DLL herr_t H5Pset_core_write_tracking(hid_t fapl_id, hbool_t is_enabled, size_t page_size);
+H5_DLL herr_t H5Pget_core_write_tracking(hid_t fapl_id, hbool_t *is_enabled, size_t *page_size);
+
+/* Dataset creation property list (DCPL) routines */
+H5_DLL herr_t H5Pset_layout(hid_t plist_id, H5D_layout_t layout);
+H5_DLL H5D_layout_t H5Pget_layout(hid_t plist_id);
+H5_DLL herr_t H5Pset_chunk(hid_t plist_id, int ndims, const hsize_t dim[/*ndims*/]);
+H5_DLL int H5Pget_chunk(hid_t plist_id, int max_ndims, hsize_t dim[]/*out*/);
+H5_DLL herr_t H5Pset_external(hid_t plist_id, const char *name, off_t offset,
+          hsize_t size);
+H5_DLL int H5Pget_external_count(hid_t plist_id);
+H5_DLL herr_t H5Pget_external(hid_t plist_id, unsigned idx, size_t name_size,
+          char *name/*out*/, off_t *offset/*out*/,
+          hsize_t *size/*out*/);
+H5_DLL herr_t H5Pset_szip(hid_t plist_id, unsigned options_mask, unsigned pixels_per_block);
+H5_DLL herr_t H5Pset_shuffle(hid_t plist_id);
+H5_DLL herr_t H5Pset_nbit(hid_t plist_id);
+H5_DLL herr_t H5Pset_scaleoffset(hid_t plist_id, H5Z_SO_scale_type_t scale_type, int scale_factor);
+H5_DLL herr_t H5Pset_fill_value(hid_t plist_id, hid_t type_id,
+     const void *value);
+H5_DLL herr_t H5Pget_fill_value(hid_t plist_id, hid_t type_id,
+     void *value/*out*/);
+H5_DLL herr_t H5Pfill_value_defined(hid_t plist, H5D_fill_value_t *status);
+H5_DLL herr_t H5Pset_alloc_time(hid_t plist_id, H5D_alloc_time_t
+	alloc_time);
+H5_DLL herr_t H5Pget_alloc_time(hid_t plist_id, H5D_alloc_time_t
+	*alloc_time/*out*/);
+H5_DLL herr_t H5Pset_fill_time(hid_t plist_id, H5D_fill_time_t fill_time);
+H5_DLL herr_t H5Pget_fill_time(hid_t plist_id, H5D_fill_time_t
+	*fill_time/*out*/);
+
+/* Dataset access property list (DAPL) routines */
+H5_DLL herr_t H5Pset_chunk_cache(hid_t dapl_id, size_t rdcc_nslots,
+       size_t rdcc_nbytes, double rdcc_w0);
+H5_DLL herr_t H5Pget_chunk_cache(hid_t dapl_id,
+       size_t *rdcc_nslots/*out*/,
+       size_t *rdcc_nbytes/*out*/,
+       double *rdcc_w0/*out*/);
+
+/* Dataset xfer property list (DXPL) routines */
+H5_DLL herr_t H5Pset_data_transform(hid_t plist_id, const char* expression);
+H5_DLL ssize_t H5Pget_data_transform(hid_t plist_id, char* expression /*out*/, size_t size);
+H5_DLL herr_t H5Pset_buffer(hid_t plist_id, size_t size, void *tconv,
+        void *bkg);
+H5_DLL size_t H5Pget_buffer(hid_t plist_id, void **tconv/*out*/,
+        void **bkg/*out*/);
+H5_DLL herr_t H5Pset_preserve(hid_t plist_id, hbool_t status);
+H5_DLL int H5Pget_preserve(hid_t plist_id);
+H5_DLL herr_t H5Pset_edc_check(hid_t plist_id, H5Z_EDC_t check);
+H5_DLL H5Z_EDC_t H5Pget_edc_check(hid_t plist_id);
+H5_DLL herr_t H5Pset_filter_callback(hid_t plist_id, H5Z_filter_func_t func,
+                                     void* op_data);
+H5_DLL herr_t H5Pset_btree_ratios(hid_t plist_id, double left, double middle,
+       double right);
+H5_DLL herr_t H5Pget_btree_ratios(hid_t plist_id, double *left/*out*/,
+       double *middle/*out*/,
+       double *right/*out*/);
+H5_DLL herr_t H5Pset_vlen_mem_manager(hid_t plist_id,
+                                       H5MM_allocate_t alloc_func,
+                                       void *alloc_info, H5MM_free_t free_func,
+                                       void *free_info);
+H5_DLL herr_t H5Pget_vlen_mem_manager(hid_t plist_id,
+                                       H5MM_allocate_t *alloc_func,
+                                       void **alloc_info,
+                                       H5MM_free_t *free_func,
+                                       void **free_info);
+H5_DLL herr_t H5Pset_hyper_vector_size(hid_t fapl_id, size_t size);
+H5_DLL herr_t H5Pget_hyper_vector_size(hid_t fapl_id, size_t *size/*out*/);
+H5_DLL herr_t H5Pset_type_conv_cb(hid_t dxpl_id, H5T_conv_except_func_t op, void* operate_data);
+H5_DLL herr_t H5Pget_type_conv_cb(hid_t dxpl_id, H5T_conv_except_func_t *op, void** operate_data);
+#ifdef H5_HAVE_PARALLEL
+H5_DLL herr_t H5Pget_mpio_actual_chunk_opt_mode(hid_t plist_id, H5D_mpio_actual_chunk_opt_mode_t *actual_chunk_opt_mode);
+H5_DLL herr_t H5Pget_mpio_actual_io_mode(hid_t plist_id, H5D_mpio_actual_io_mode_t *actual_io_mode);
+H5_DLL herr_t H5Pget_mpio_no_collective_cause(hid_t plist_id, uint32_t *local_no_collective_cause, uint32_t *global_no_collective_cause);
+#endif /* H5_HAVE_PARALLEL */
+
+/* Link creation property list (LCPL) routines */
+H5_DLL herr_t H5Pset_create_intermediate_group(hid_t plist_id, unsigned crt_intmd);
+H5_DLL herr_t H5Pget_create_intermediate_group(hid_t plist_id, unsigned *crt_intmd /*out*/);
+
+/* Group creation property list (GCPL) routines */
+H5_DLL herr_t H5Pset_local_heap_size_hint(hid_t plist_id, size_t size_hint);
+H5_DLL herr_t H5Pget_local_heap_size_hint(hid_t plist_id, size_t *size_hint /*out*/);
+H5_DLL herr_t H5Pset_link_phase_change(hid_t plist_id, unsigned max_compact, unsigned min_dense);
+H5_DLL herr_t H5Pget_link_phase_change(hid_t plist_id, unsigned *max_compact /*out*/, unsigned *min_dense /*out*/);
+H5_DLL herr_t H5Pset_est_link_info(hid_t plist_id, unsigned est_num_entries, unsigned est_name_len);
+H5_DLL herr_t H5Pget_est_link_info(hid_t plist_id, unsigned *est_num_entries /* out */, unsigned *est_name_len /* out */);
+H5_DLL herr_t H5Pset_link_creation_order(hid_t plist_id, unsigned crt_order_flags);
+H5_DLL herr_t H5Pget_link_creation_order(hid_t plist_id, unsigned *crt_order_flags /* out */);
+
+/* String creation property list (STRCPL) routines */
+H5_DLL herr_t H5Pset_char_encoding(hid_t plist_id, H5T_cset_t encoding);
+H5_DLL herr_t H5Pget_char_encoding(hid_t plist_id, H5T_cset_t *encoding /*out*/);
+
+/* Link access property list (LAPL) routines */
+H5_DLL herr_t H5Pset_nlinks(hid_t plist_id, size_t nlinks);
+H5_DLL herr_t H5Pget_nlinks(hid_t plist_id, size_t *nlinks);
+H5_DLL herr_t H5Pset_elink_prefix(hid_t plist_id, const char *prefix);
+H5_DLL ssize_t H5Pget_elink_prefix(hid_t plist_id, char *prefix, size_t size);
+H5_DLL hid_t H5Pget_elink_fapl(hid_t lapl_id);
+H5_DLL herr_t H5Pset_elink_fapl(hid_t lapl_id, hid_t fapl_id);
+H5_DLL herr_t H5Pset_elink_acc_flags(hid_t lapl_id, unsigned flags);
+H5_DLL herr_t H5Pget_elink_acc_flags(hid_t lapl_id, unsigned *flags);
+H5_DLL herr_t H5Pset_elink_cb(hid_t lapl_id, H5L_elink_traverse_t func, void *op_data);
+H5_DLL herr_t H5Pget_elink_cb(hid_t lapl_id, H5L_elink_traverse_t *func, void **op_data);
+
+/* Object copy property list (OCPYPL) routines */
+H5_DLL herr_t H5Pset_copy_object(hid_t plist_id, unsigned crt_intmd);
+H5_DLL herr_t H5Pget_copy_object(hid_t plist_id, unsigned *crt_intmd /*out*/);
+H5_DLL herr_t H5Padd_merge_committed_dtype_path(hid_t plist_id, const char *path);
+H5_DLL herr_t H5Pfree_merge_committed_dtype_paths(hid_t plist_id);
+H5_DLL herr_t H5Pset_mcdt_search_cb(hid_t plist_id, H5O_mcdt_search_cb_t func, void *op_data);
+H5_DLL herr_t H5Pget_mcdt_search_cb(hid_t plist_id, H5O_mcdt_search_cb_t *func, void **op_data);
+
+/* Symbols defined for compatibility with previous versions of the HDF5 API.
+ *
+ * Use of these symbols is deprecated.
+ */
+#ifndef H5_NO_DEPRECATED_SYMBOLS
+
+/* Macros */
+
+/* We renamed the "root" of the property list class hierarchy */
+#define H5P_NO_CLASS            H5P_ROOT
+
+
+/* Typedefs */
+
+
+/* Function prototypes */
+H5_DLL herr_t H5Pregister1(hid_t cls_id, const char *name, size_t size,
+    void *def_value, H5P_prp_create_func_t prp_create,
+    H5P_prp_set_func_t prp_set, H5P_prp_get_func_t prp_get,
+    H5P_prp_delete_func_t prp_del, H5P_prp_copy_func_t prp_copy,
+    H5P_prp_close_func_t prp_close);
+H5_DLL herr_t H5Pinsert1(hid_t plist_id, const char *name, size_t size,
+    void *value, H5P_prp_set_func_t prp_set, H5P_prp_get_func_t prp_get,
+    H5P_prp_delete_func_t prp_delete, H5P_prp_copy_func_t prp_copy,
+    H5P_prp_close_func_t prp_close);
+H5_DLL H5Z_filter_t H5Pget_filter1(hid_t plist_id, unsigned filter,
+    unsigned int *flags/*out*/, size_t *cd_nelmts/*out*/,
+    unsigned cd_values[]/*out*/, size_t namelen, char name[]);
+H5_DLL herr_t H5Pget_filter_by_id1(hid_t plist_id, H5Z_filter_t id,
+    unsigned int *flags/*out*/, size_t *cd_nelmts/*out*/,
+    unsigned cd_values[]/*out*/, size_t namelen, char name[]/*out*/);
+
+#endif /* H5_NO_DEPRECATED_SYMBOLS */
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* _H5Ppublic_H */
+
diff --git a/privatemodules/nc4/include/H5Rpublic.h b/privatemodules/nc4/include/H5Rpublic.h
new file mode 100644
index 0000000000000000000000000000000000000000..04d319bebbbe7a5d5cc644d081c95d867063a886
--- /dev/null
+++ b/privatemodules/nc4/include/H5Rpublic.h
@@ -0,0 +1,92 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * This file contains public declarations for the H5S module.
+ */
+#ifndef _H5Rpublic_H
+#define _H5Rpublic_H
+
+/* Public headers needed by this file */
+#include "H5public.h"
+#include "H5Gpublic.h"
+#include "H5Ipublic.h"
+
+/*
+ * Reference types allowed.
+ */
+typedef enum {
+    H5R_BADTYPE     =   (-1),   /*invalid Reference Type                     */
+    H5R_OBJECT,                 /*Object reference                           */
+    H5R_DATASET_REGION,         /*Dataset Region Reference                   */
+    H5R_MAXTYPE                 /*highest type (Invalid as true type)	     */
+} H5R_type_t;
+
+/* Note! Be careful with the sizes of the references because they should really
+ * depend on the run-time values in the file.  Unfortunately, the arrays need
+ * to be defined at compile-time, so we have to go with the worst case sizes for
+ * them.  -QAK
+ */
+#define H5R_OBJ_REF_BUF_SIZE    sizeof(haddr_t)
+/* Object reference structure for user's code */
+typedef haddr_t hobj_ref_t; /* Needs to be large enough to store largest haddr_t in a worst case machine (ie. 8 bytes currently) */
+
+#define H5R_DSET_REG_REF_BUF_SIZE    (sizeof(haddr_t)+4)
+/* 4 is used instead of sizeof(int) to permit portability between
+   the Crays and other machines (the heap ID is always encoded as an int32 anyway)
+*/
+/* Dataset Region reference structure for user's code */
+typedef unsigned char hdset_reg_ref_t[H5R_DSET_REG_REF_BUF_SIZE];/* Buffer to store heap ID and index */
+/* Needs to be large enough to store largest haddr_t in a worst case machine (ie. 8 bytes currently) plus an int */
+
+/* Publicly visible data structures */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Functions in H5R.c */
+H5_DLL herr_t H5Rcreate(void *ref, hid_t loc_id, const char *name,
+			 H5R_type_t ref_type, hid_t space_id);
+H5_DLL hid_t H5Rdereference(hid_t dataset, H5R_type_t ref_type, const void *ref);
+H5_DLL hid_t H5Rget_region(hid_t dataset, H5R_type_t ref_type, const void *ref);
+H5_DLL herr_t H5Rget_obj_type2(hid_t id, H5R_type_t ref_type, const void *_ref,
+    H5O_type_t *obj_type);
+H5_DLL ssize_t H5Rget_name(hid_t loc_id, H5R_type_t ref_type, const void *ref,
+    char *name/*out*/, size_t size);
+
+/* Symbols defined for compatibility with previous versions of the HDF5 API.
+ *
+ * Use of these symbols is deprecated.
+ */
+#ifndef H5_NO_DEPRECATED_SYMBOLS
+
+/* Macros */
+
+
+/* Typedefs */
+
+
+/* Function prototypes */
+H5_DLL H5G_obj_t H5Rget_obj_type1(hid_t id, H5R_type_t ref_type, const void *_ref);
+
+#endif /* H5_NO_DEPRECATED_SYMBOLS */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* _H5Rpublic_H */
+
diff --git a/privatemodules/nc4/include/H5Spublic.h b/privatemodules/nc4/include/H5Spublic.h
new file mode 100644
index 0000000000000000000000000000000000000000..c62a7b7648332f90700ffd56ab81a0187a441817
--- /dev/null
+++ b/privatemodules/nc4/include/H5Spublic.h
@@ -0,0 +1,152 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * This file contains public declarations for the H5S module.
+ */
+#ifndef _H5Spublic_H
+#define _H5Spublic_H
+
+/* Public headers needed by this file */
+#include "H5public.h"
+#include "H5Ipublic.h"
+
+/* Define atomic datatypes */
+#define H5S_ALL         0
+#define H5S_UNLIMITED	((hsize_t)(hssize_t)(-1))
+
+/* Define user-level maximum number of dimensions */
+#define H5S_MAX_RANK    32
+
+/* Different types of dataspaces */
+typedef enum H5S_class_t {
+    H5S_NO_CLASS         = -1,  /*error                                      */
+    H5S_SCALAR           = 0,   /*scalar variable                            */
+    H5S_SIMPLE           = 1,   /*simple data space                          */
+    H5S_NULL             = 2    /*null data space                            */
+} H5S_class_t;
+
+/* Different ways of combining selections */
+typedef enum H5S_seloper_t {
+    H5S_SELECT_NOOP      = -1,  /* error                                     */
+    H5S_SELECT_SET       = 0,   /* Select "set" operation 		     */
+    H5S_SELECT_OR,              /* Binary "or" operation for hyperslabs
+                                 * (add new selection to existing selection)
+                                 * Original region:  AAAAAAAAAA
+                                 * New region:             BBBBBBBBBB
+                                 * A or B:           CCCCCCCCCCCCCCCC
+                                 */
+    H5S_SELECT_AND,             /* Binary "and" operation for hyperslabs
+                                 * (only leave overlapped regions in selection)
+                                 * Original region:  AAAAAAAAAA
+                                 * New region:             BBBBBBBBBB
+                                 * A and B:                CCCC
+                                 */
+    H5S_SELECT_XOR,             /* Binary "xor" operation for hyperslabs
+                                 * (only leave non-overlapped regions in selection)
+                                 * Original region:  AAAAAAAAAA
+                                 * New region:             BBBBBBBBBB
+                                 * A xor B:          CCCCCC    CCCCCC
+                                 */
+    H5S_SELECT_NOTB,            /* Binary "not" operation for hyperslabs
+                                 * (only leave non-overlapped regions in original selection)
+                                 * Original region:  AAAAAAAAAA
+                                 * New region:             BBBBBBBBBB
+                                 * A not B:          CCCCCC
+                                 */
+    H5S_SELECT_NOTA,            /* Binary "not" operation for hyperslabs
+                                 * (only leave non-overlapped regions in new selection)
+                                 * Original region:  AAAAAAAAAA
+                                 * New region:             BBBBBBBBBB
+                                 * B not A:                    CCCCCC
+                                 */
+    H5S_SELECT_APPEND,          /* Append elements to end of point selection */
+    H5S_SELECT_PREPEND,         /* Prepend elements to beginning of point selection */
+    H5S_SELECT_INVALID          /* Invalid upper bound on selection operations */
+} H5S_seloper_t;
+
+/* Enumerated type for the type of selection */
+typedef enum {
+    H5S_SEL_ERROR	= -1, 	/* Error			*/
+    H5S_SEL_NONE	= 0,    /* Nothing selected 		*/
+    H5S_SEL_POINTS	= 1,    /* Sequence of points selected	*/
+    H5S_SEL_HYPERSLABS  = 2,    /* "New-style" hyperslab selection defined	*/
+    H5S_SEL_ALL		= 3,    /* Entire extent selected	*/
+    H5S_SEL_N			/*THIS MUST BE LAST		*/
+}H5S_sel_type;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Functions in H5S.c */
+H5_DLL hid_t H5Screate(H5S_class_t type);
+H5_DLL hid_t H5Screate_simple(int rank, const hsize_t dims[],
+			       const hsize_t maxdims[]);
+H5_DLL herr_t H5Sset_extent_simple(hid_t space_id, int rank,
+				    const hsize_t dims[],
+				    const hsize_t max[]);
+H5_DLL hid_t H5Scopy(hid_t space_id);
+H5_DLL herr_t H5Sclose(hid_t space_id);
+H5_DLL herr_t H5Sencode(hid_t obj_id, void *buf, size_t *nalloc);
+H5_DLL hid_t H5Sdecode(const void *buf);
+H5_DLL hssize_t H5Sget_simple_extent_npoints(hid_t space_id);
+H5_DLL int H5Sget_simple_extent_ndims(hid_t space_id);
+H5_DLL int H5Sget_simple_extent_dims(hid_t space_id, hsize_t dims[],
+				      hsize_t maxdims[]);
+H5_DLL htri_t H5Sis_simple(hid_t space_id);
+H5_DLL hssize_t H5Sget_select_npoints(hid_t spaceid);
+H5_DLL herr_t H5Sselect_hyperslab(hid_t space_id, H5S_seloper_t op,
+				   const hsize_t start[],
+				   const hsize_t _stride[],
+				   const hsize_t count[],
+				   const hsize_t _block[]);
+/* #define NEW_HYPERSLAB_API */
+#ifdef NEW_HYPERSLAB_API
+H5_DLL hid_t H5Scombine_hyperslab(hid_t space_id, H5S_seloper_t op,
+				   const hsize_t start[],
+				   const hsize_t _stride[],
+				   const hsize_t count[],
+				   const hsize_t _block[]);
+H5_DLL herr_t H5Sselect_select(hid_t space1_id, H5S_seloper_t op,
+                                  hid_t space2_id);
+H5_DLL hid_t H5Scombine_select(hid_t space1_id, H5S_seloper_t op,
+                                  hid_t space2_id);
+#endif /* NEW_HYPERSLAB_API */
+H5_DLL herr_t H5Sselect_elements(hid_t space_id, H5S_seloper_t op,
+    size_t num_elem, const hsize_t *coord);
+H5_DLL H5S_class_t H5Sget_simple_extent_type(hid_t space_id);
+H5_DLL herr_t H5Sset_extent_none(hid_t space_id);
+H5_DLL herr_t H5Sextent_copy(hid_t dst_id,hid_t src_id);
+H5_DLL htri_t H5Sextent_equal(hid_t sid1, hid_t sid2);
+H5_DLL herr_t H5Sselect_all(hid_t spaceid);
+H5_DLL herr_t H5Sselect_none(hid_t spaceid);
+H5_DLL herr_t H5Soffset_simple(hid_t space_id, const hssize_t *offset);
+H5_DLL htri_t H5Sselect_valid(hid_t spaceid);
+H5_DLL hssize_t H5Sget_select_hyper_nblocks(hid_t spaceid);
+H5_DLL hssize_t H5Sget_select_elem_npoints(hid_t spaceid);
+H5_DLL herr_t H5Sget_select_hyper_blocklist(hid_t spaceid, hsize_t startblock,
+    hsize_t numblocks, hsize_t buf[/*numblocks*/]);
+H5_DLL herr_t H5Sget_select_elem_pointlist(hid_t spaceid, hsize_t startpoint,
+    hsize_t numpoints, hsize_t buf[/*numpoints*/]);
+H5_DLL herr_t H5Sget_select_bounds(hid_t spaceid, hsize_t start[],
+    hsize_t end[]);
+H5_DLL H5S_sel_type H5Sget_select_type(hid_t spaceid);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* _H5Spublic_H */
+
diff --git a/privatemodules/nc4/include/H5TBpublic.h b/privatemodules/nc4/include/H5TBpublic.h
new file mode 100644
index 0000000000000000000000000000000000000000..874ef2077c9521b8a4f4493a0c6157cec4c9f300
--- /dev/null
+++ b/privatemodules/nc4/include/H5TBpublic.h
@@ -0,0 +1,233 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef _H5TBpublic_H
+#define _H5TBpublic_H
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Create functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+H5_HLDLL herr_t  H5TBmake_table( const char *table_title,
+                       hid_t loc_id,
+                       const char *dset_name,
+                       hsize_t nfields,
+                       hsize_t nrecords,
+                       size_t type_size,
+                       const char *field_names[],
+                       const size_t *field_offset,
+                       const hid_t *field_types,
+                       hsize_t chunk_size,
+                       void *fill_data,
+                       int compress,
+                       const void *buf );
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Write functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+H5_HLDLL herr_t  H5TBappend_records( hid_t loc_id,
+                           const char *dset_name,
+                           hsize_t nrecords,
+                           size_t type_size,
+                           const size_t *field_offset,
+                           const size_t *dst_sizes,
+                           const void *buf );
+
+H5_HLDLL herr_t  H5TBwrite_records( hid_t loc_id,
+                          const char *dset_name,
+                          hsize_t start,
+                          hsize_t nrecords,
+                          size_t type_size,
+                          const size_t *field_offset,
+                          const size_t *dst_sizes,
+                          const void *buf );
+
+
+H5_HLDLL herr_t  H5TBwrite_fields_name( hid_t loc_id,
+                              const char *dset_name,
+                              const char *field_names,
+                              hsize_t start,
+                              hsize_t nrecords,
+                              size_t type_size,
+                              const size_t *field_offset,
+                              const size_t *dst_sizes,
+                              const void *buf );
+
+H5_HLDLL herr_t  H5TBwrite_fields_index( hid_t loc_id,
+                               const char *dset_name,
+                               hsize_t nfields,
+                               const int *field_index,
+                               hsize_t start,
+                               hsize_t nrecords,
+                               size_t type_size,
+                               const size_t *field_offset,
+                               const size_t *dst_sizes,
+                               const void *buf );
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Read functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+
+H5_HLDLL herr_t  H5TBread_table( hid_t loc_id,
+                       const char *dset_name,
+                       size_t dst_size,
+                       const size_t *dst_offset,
+                       const size_t *dst_sizes,
+                       void *dst_buf );
+
+
+H5_HLDLL herr_t  H5TBread_fields_name( hid_t loc_id,
+                             const char *dset_name,
+                             const char *field_names,
+                             hsize_t start,
+                             hsize_t nrecords,
+                             size_t type_size,
+                             const size_t *field_offset,
+                             const size_t *dst_sizes,
+                             void *buf );
+
+H5_HLDLL herr_t  H5TBread_fields_index( hid_t loc_id,
+                              const char *dset_name,
+                              hsize_t nfields,
+                              const int *field_index,
+                              hsize_t start,
+                              hsize_t nrecords,
+                              size_t type_size,
+                              const size_t *field_offset,
+                              const size_t *dst_sizes,
+                              void *buf );
+
+
+H5_HLDLL herr_t  H5TBread_records( hid_t loc_id,
+                         const char *dset_name,
+                         hsize_t start,
+                         hsize_t nrecords,
+                         size_t type_size,
+                         const size_t *dst_offset,
+                         const size_t *dst_sizes,
+                         void *buf );
+
+/*-------------------------------------------------------------------------
+ *
+ * Inquiry functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+H5_HLDLL herr_t  H5TBget_table_info ( hid_t loc_id,
+                            const char *dset_name,
+                            hsize_t *nfields,
+                            hsize_t *nrecords );
+
+H5_HLDLL herr_t  H5TBget_field_info( hid_t loc_id,
+                           const char *dset_name,
+                           char *field_names[],
+                           size_t *field_sizes,
+                           size_t *field_offsets,
+                           size_t *type_size );
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Manipulation functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+H5_HLDLL herr_t  H5TBdelete_record( hid_t loc_id,
+                          const char *dset_name,
+                          hsize_t start,
+                          hsize_t nrecords );
+
+
+H5_HLDLL herr_t  H5TBinsert_record( hid_t loc_id,
+                          const char *dset_name,
+                          hsize_t start,
+                          hsize_t nrecords,
+                          size_t dst_size,
+                          const size_t *dst_offset,
+                          const size_t *dst_sizes,
+                          void *buf );
+
+H5_HLDLL herr_t  H5TBadd_records_from( hid_t loc_id,
+                             const char *dset_name1,
+                             hsize_t start1,
+                             hsize_t nrecords,
+                             const char *dset_name2,
+                             hsize_t start2 );
+
+H5_HLDLL herr_t  H5TBcombine_tables( hid_t loc_id1,
+                           const char *dset_name1,
+                           hid_t loc_id2,
+                           const char *dset_name2,
+                           const char *dset_name3 );
+
+H5_HLDLL herr_t  H5TBinsert_field( hid_t loc_id,
+                         const char *dset_name,
+                         const char *field_name,
+                         hid_t field_type,
+                         hsize_t position,
+                         const void *fill_data,
+                         const void *buf );
+
+H5_HLDLL herr_t  H5TBdelete_field( hid_t loc_id,
+                         const char *dset_name,
+                         const char *field_name );
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Table attribute functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+H5_HLDLL herr_t  H5TBAget_title( hid_t loc_id,
+                       char *table_title );
+
+H5_HLDLL htri_t  H5TBAget_fill(hid_t loc_id,
+                      const char *dset_name,
+                      hid_t dset_id,
+                      unsigned char *dst_buf);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif
+
diff --git a/privatemodules/nc4/include/H5Tpublic.h b/privatemodules/nc4/include/H5Tpublic.h
new file mode 100644
index 0000000000000000000000000000000000000000..d646ef1e887e048fdf6a5de709e2bd6db4f45519
--- /dev/null
+++ b/privatemodules/nc4/include/H5Tpublic.h
@@ -0,0 +1,621 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * This file contains public declarations for the H5T module.
+ */
+#ifndef _H5Tpublic_H
+#define _H5Tpublic_H
+
+/* Public headers needed by this file */
+#include "H5public.h"
+#include "H5Ipublic.h"
+
+#define HOFFSET(S,M)    (offsetof(S,M))
+
+/* These are the various classes of datatypes */
+/* If this goes over 16 types (0-15), the file format will need to change) */
+typedef enum H5T_class_t {
+    H5T_NO_CLASS         = -1,  /*error                                      */
+    H5T_INTEGER          = 0,   /*integer types                              */
+    H5T_FLOAT            = 1,   /*floating-point types                       */
+    H5T_TIME             = 2,   /*date and time types                        */
+    H5T_STRING           = 3,   /*character string types                     */
+    H5T_BITFIELD         = 4,   /*bit field types                            */
+    H5T_OPAQUE           = 5,   /*opaque types                               */
+    H5T_COMPOUND         = 6,   /*compound types                             */
+    H5T_REFERENCE        = 7,   /*reference types                            */
+    H5T_ENUM		 = 8,	/*enumeration types                          */
+    H5T_VLEN		 = 9,	/*Variable-Length types                      */
+    H5T_ARRAY	         = 10,	/*Array types                                */
+
+    H5T_NCLASSES                /*this must be last                          */
+} H5T_class_t;
+
+/* Byte orders */
+typedef enum H5T_order_t {
+    H5T_ORDER_ERROR      = -1,  /*error                                      */
+    H5T_ORDER_LE         = 0,   /*little endian                              */
+    H5T_ORDER_BE         = 1,   /*bit endian                                 */
+    H5T_ORDER_VAX        = 2,   /*VAX mixed endian                           */
+    H5T_ORDER_MIXED      = 3,   /*Compound type with mixed member orders     */
+    H5T_ORDER_NONE       = 4    /*no particular order (strings, bits,..)     */
+    /*H5T_ORDER_NONE must be last */
+} H5T_order_t;
+
+/* Types of integer sign schemes */
+typedef enum H5T_sign_t {
+    H5T_SGN_ERROR        = -1,  /*error                                      */
+    H5T_SGN_NONE         = 0,   /*this is an unsigned type                   */
+    H5T_SGN_2            = 1,   /*two's complement                           */
+
+    H5T_NSGN             = 2    /*this must be last!                         */
+} H5T_sign_t;
+
+/* Floating-point normalization schemes */
+typedef enum H5T_norm_t {
+    H5T_NORM_ERROR       = -1,  /*error                                      */
+    H5T_NORM_IMPLIED     = 0,   /*msb of mantissa isn't stored, always 1     */
+    H5T_NORM_MSBSET      = 1,   /*msb of mantissa is always 1                */
+    H5T_NORM_NONE        = 2    /*not normalized                             */
+    /*H5T_NORM_NONE must be last */
+} H5T_norm_t;
+
+/*
+ * Character set to use for text strings.  Do not change these values since
+ * they appear in HDF5 files!
+ */
+typedef enum H5T_cset_t {
+    H5T_CSET_ERROR       = -1,  /*error                                      */
+    H5T_CSET_ASCII       = 0,   /*US ASCII                                   */
+    H5T_CSET_UTF8        = 1,   /*UTF-8 Unicode encoding		     */
+    H5T_CSET_RESERVED_2  = 2,   /*reserved for later use		     */
+    H5T_CSET_RESERVED_3  = 3,   /*reserved for later use		     */
+    H5T_CSET_RESERVED_4  = 4,   /*reserved for later use		     */
+    H5T_CSET_RESERVED_5  = 5,   /*reserved for later use		     */
+    H5T_CSET_RESERVED_6  = 6,   /*reserved for later use		     */
+    H5T_CSET_RESERVED_7  = 7,   /*reserved for later use		     */
+    H5T_CSET_RESERVED_8  = 8,   /*reserved for later use		     */
+    H5T_CSET_RESERVED_9  = 9,   /*reserved for later use		     */
+    H5T_CSET_RESERVED_10 = 10,  /*reserved for later use		     */
+    H5T_CSET_RESERVED_11 = 11,  /*reserved for later use		     */
+    H5T_CSET_RESERVED_12 = 12,  /*reserved for later use		     */
+    H5T_CSET_RESERVED_13 = 13,  /*reserved for later use		     */
+    H5T_CSET_RESERVED_14 = 14,  /*reserved for later use		     */
+    H5T_CSET_RESERVED_15 = 15   /*reserved for later use		     */
+} H5T_cset_t;
+#define H5T_NCSET H5T_CSET_RESERVED_2    		/*Number of character sets actually defined  */
+
+/*
+ * Type of padding to use in character strings.  Do not change these values
+ * since they appear in HDF5 files!
+ */
+typedef enum H5T_str_t {
+    H5T_STR_ERROR        = -1,  /*error                                      */
+    H5T_STR_NULLTERM     = 0,   /*null terminate like in C                   */
+    H5T_STR_NULLPAD      = 1,   /*pad with nulls                             */
+    H5T_STR_SPACEPAD     = 2,   /*pad with spaces like in Fortran            */
+    H5T_STR_RESERVED_3   = 3,   /*reserved for later use		     */
+    H5T_STR_RESERVED_4   = 4,   /*reserved for later use		     */
+    H5T_STR_RESERVED_5   = 5,   /*reserved for later use		     */
+    H5T_STR_RESERVED_6   = 6,   /*reserved for later use		     */
+    H5T_STR_RESERVED_7   = 7,   /*reserved for later use		     */
+    H5T_STR_RESERVED_8   = 8,   /*reserved for later use		     */
+    H5T_STR_RESERVED_9   = 9,   /*reserved for later use		     */
+    H5T_STR_RESERVED_10  = 10,  /*reserved for later use		     */
+    H5T_STR_RESERVED_11  = 11,  /*reserved for later use		     */
+    H5T_STR_RESERVED_12  = 12,  /*reserved for later use		     */
+    H5T_STR_RESERVED_13  = 13,  /*reserved for later use		     */
+    H5T_STR_RESERVED_14  = 14,  /*reserved for later use		     */
+    H5T_STR_RESERVED_15  = 15   /*reserved for later use		     */
+} H5T_str_t;
+#define H5T_NSTR H5T_STR_RESERVED_3		/*num H5T_str_t types actually defined	     */
+
+/* Type of padding to use in other atomic types */
+typedef enum H5T_pad_t {
+    H5T_PAD_ERROR        = -1,  /*error                                      */
+    H5T_PAD_ZERO         = 0,   /*always set to zero                         */
+    H5T_PAD_ONE          = 1,   /*always set to one                          */
+    H5T_PAD_BACKGROUND   = 2,   /*set to background value                    */
+
+    H5T_NPAD             = 3    /*THIS MUST BE LAST                          */
+} H5T_pad_t;
+
+/* Commands sent to conversion functions */
+typedef enum H5T_cmd_t {
+    H5T_CONV_INIT	= 0,	/*query and/or initialize private data	     */
+    H5T_CONV_CONV	= 1, 	/*convert data from source to dest datatype */
+    H5T_CONV_FREE	= 2	/*function is being removed from path	     */
+} H5T_cmd_t;
+
+/* How is the `bkg' buffer used by the conversion function? */
+typedef enum H5T_bkg_t {
+    H5T_BKG_NO		= 0, 	/*background buffer is not needed, send NULL */
+    H5T_BKG_TEMP	= 1,	/*bkg buffer used as temp storage only       */
+    H5T_BKG_YES		= 2	/*init bkg buf with data before conversion   */
+} H5T_bkg_t;
+
+/* Type conversion client data */
+typedef struct H5T_cdata_t {
+    H5T_cmd_t		command;/*what should the conversion function do?    */
+    H5T_bkg_t		need_bkg;/*is the background buffer needed?	     */
+    hbool_t		recalc;	/*recalculate private data		     */
+    void		*priv;	/*private data				     */
+} H5T_cdata_t;
+
+/* Conversion function persistence */
+typedef enum H5T_pers_t {
+    H5T_PERS_DONTCARE	= -1, 	/*wild card				     */
+    H5T_PERS_HARD	= 0,	/*hard conversion function		     */
+    H5T_PERS_SOFT	= 1 	/*soft conversion function		     */
+} H5T_pers_t;
+
+/* The order to retrieve atomic native datatype */
+typedef enum H5T_direction_t {
+    H5T_DIR_DEFAULT     = 0,    /*default direction is inscendent            */
+    H5T_DIR_ASCEND      = 1,    /*in inscendent order                        */
+    H5T_DIR_DESCEND     = 2     /*in descendent order                        */
+} H5T_direction_t;
+
+/* The exception type passed into the conversion callback function */
+typedef enum H5T_conv_except_t {
+    H5T_CONV_EXCEPT_RANGE_HI       = 0,   /*source value is greater than destination's range */
+    H5T_CONV_EXCEPT_RANGE_LOW      = 1,   /*source value is less than destination's range    */
+    H5T_CONV_EXCEPT_PRECISION      = 2,   /*source value loses precision in destination      */
+    H5T_CONV_EXCEPT_TRUNCATE       = 3,   /*source value is truncated in destination         */
+    H5T_CONV_EXCEPT_PINF           = 4,   /*source value is positive infinity(floating number) */
+    H5T_CONV_EXCEPT_NINF           = 5,   /*source value is negative infinity(floating number) */
+    H5T_CONV_EXCEPT_NAN            = 6    /*source value is NaN(floating number)             */
+} H5T_conv_except_t;
+
+/* The return value from conversion callback function H5T_conv_except_func_t */
+typedef enum H5T_conv_ret_t {
+    H5T_CONV_ABORT      = -1,   /*abort conversion                           */
+    H5T_CONV_UNHANDLED  = 0,    /*callback function failed to handle the exception      */
+    H5T_CONV_HANDLED    = 1     /*callback function handled the exception successfully  */
+} H5T_conv_ret_t;
+
+/* Variable Length Datatype struct in memory */
+/* (This is only used for VL sequences, not VL strings, which are stored in char *'s) */
+typedef struct {
+    size_t len; /* Length of VL data (in base type units) */
+    void *p;    /* Pointer to VL data */
+} hvl_t;
+
+/* Variable Length String information */
+#define H5T_VARIABLE    ((size_t)(-1))  /* Indicate that a string is variable length (null-terminated in C, instead of fixed length) */
+
+/* Opaque information */
+#define H5T_OPAQUE_TAG_MAX      256     /* Maximum length of an opaque tag */
+                                        /* This could be raised without too much difficulty */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* All datatype conversion functions are... */
+typedef herr_t (*H5T_conv_t) (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+      size_t nelmts, size_t buf_stride, size_t bkg_stride, void *buf,
+      void *bkg, hid_t dset_xfer_plist);
+
+/* Exception handler.  If an exception like overflow happenes during conversion,
+ * this function is called if it's registered through H5Pset_type_conv_cb.
+ */
+typedef H5T_conv_ret_t (*H5T_conv_except_func_t)(H5T_conv_except_t except_type,
+    hid_t src_id, hid_t dst_id, void *src_buf, void *dst_buf, void *user_data);
+
+/* When this header is included from a private header, don't make calls to H5open() */
+#undef H5OPEN
+#ifndef _H5private_H
+#define H5OPEN          H5open(),
+#else   /* _H5private_H */
+#define H5OPEN
+#endif  /* _H5private_H */
+
+/*
+ * The IEEE floating point types in various byte orders.
+ */
+#define H5T_IEEE_F32BE		(H5OPEN H5T_IEEE_F32BE_g)
+#define H5T_IEEE_F32LE		(H5OPEN H5T_IEEE_F32LE_g)
+#define H5T_IEEE_F64BE		(H5OPEN H5T_IEEE_F64BE_g)
+#define H5T_IEEE_F64LE		(H5OPEN H5T_IEEE_F64LE_g)
+H5_DLLVAR hid_t H5T_IEEE_F32BE_g;
+H5_DLLVAR hid_t H5T_IEEE_F32LE_g;
+H5_DLLVAR hid_t H5T_IEEE_F64BE_g;
+H5_DLLVAR hid_t H5T_IEEE_F64LE_g;
+
+/*
+ * These are "standard" types.  For instance, signed (2's complement) and
+ * unsigned integers of various sizes and byte orders.
+ */
+#define H5T_STD_I8BE		(H5OPEN H5T_STD_I8BE_g)
+#define H5T_STD_I8LE		(H5OPEN H5T_STD_I8LE_g)
+#define H5T_STD_I16BE		(H5OPEN H5T_STD_I16BE_g)
+#define H5T_STD_I16LE		(H5OPEN H5T_STD_I16LE_g)
+#define H5T_STD_I32BE		(H5OPEN H5T_STD_I32BE_g)
+#define H5T_STD_I32LE		(H5OPEN H5T_STD_I32LE_g)
+#define H5T_STD_I64BE		(H5OPEN H5T_STD_I64BE_g)
+#define H5T_STD_I64LE		(H5OPEN H5T_STD_I64LE_g)
+#define H5T_STD_U8BE		(H5OPEN H5T_STD_U8BE_g)
+#define H5T_STD_U8LE		(H5OPEN H5T_STD_U8LE_g)
+#define H5T_STD_U16BE		(H5OPEN H5T_STD_U16BE_g)
+#define H5T_STD_U16LE		(H5OPEN H5T_STD_U16LE_g)
+#define H5T_STD_U32BE		(H5OPEN H5T_STD_U32BE_g)
+#define H5T_STD_U32LE		(H5OPEN H5T_STD_U32LE_g)
+#define H5T_STD_U64BE		(H5OPEN H5T_STD_U64BE_g)
+#define H5T_STD_U64LE		(H5OPEN H5T_STD_U64LE_g)
+#define H5T_STD_B8BE		(H5OPEN H5T_STD_B8BE_g)
+#define H5T_STD_B8LE		(H5OPEN H5T_STD_B8LE_g)
+#define H5T_STD_B16BE		(H5OPEN H5T_STD_B16BE_g)
+#define H5T_STD_B16LE		(H5OPEN H5T_STD_B16LE_g)
+#define H5T_STD_B32BE		(H5OPEN H5T_STD_B32BE_g)
+#define H5T_STD_B32LE		(H5OPEN H5T_STD_B32LE_g)
+#define H5T_STD_B64BE		(H5OPEN H5T_STD_B64BE_g)
+#define H5T_STD_B64LE		(H5OPEN H5T_STD_B64LE_g)
+#define H5T_STD_REF_OBJ	        (H5OPEN H5T_STD_REF_OBJ_g)
+#define H5T_STD_REF_DSETREG     (H5OPEN H5T_STD_REF_DSETREG_g)
+H5_DLLVAR hid_t H5T_STD_I8BE_g;
+H5_DLLVAR hid_t H5T_STD_I8LE_g;
+H5_DLLVAR hid_t H5T_STD_I16BE_g;
+H5_DLLVAR hid_t H5T_STD_I16LE_g;
+H5_DLLVAR hid_t H5T_STD_I32BE_g;
+H5_DLLVAR hid_t H5T_STD_I32LE_g;
+H5_DLLVAR hid_t H5T_STD_I64BE_g;
+H5_DLLVAR hid_t H5T_STD_I64LE_g;
+H5_DLLVAR hid_t H5T_STD_U8BE_g;
+H5_DLLVAR hid_t H5T_STD_U8LE_g;
+H5_DLLVAR hid_t H5T_STD_U16BE_g;
+H5_DLLVAR hid_t H5T_STD_U16LE_g;
+H5_DLLVAR hid_t H5T_STD_U32BE_g;
+H5_DLLVAR hid_t H5T_STD_U32LE_g;
+H5_DLLVAR hid_t H5T_STD_U64BE_g;
+H5_DLLVAR hid_t H5T_STD_U64LE_g;
+H5_DLLVAR hid_t H5T_STD_B8BE_g;
+H5_DLLVAR hid_t H5T_STD_B8LE_g;
+H5_DLLVAR hid_t H5T_STD_B16BE_g;
+H5_DLLVAR hid_t H5T_STD_B16LE_g;
+H5_DLLVAR hid_t H5T_STD_B32BE_g;
+H5_DLLVAR hid_t H5T_STD_B32LE_g;
+H5_DLLVAR hid_t H5T_STD_B64BE_g;
+H5_DLLVAR hid_t H5T_STD_B64LE_g;
+H5_DLLVAR hid_t H5T_STD_REF_OBJ_g;
+H5_DLLVAR hid_t H5T_STD_REF_DSETREG_g;
+
+/*
+ * Types which are particular to Unix.
+ */
+#define H5T_UNIX_D32BE		(H5OPEN H5T_UNIX_D32BE_g)
+#define H5T_UNIX_D32LE		(H5OPEN H5T_UNIX_D32LE_g)
+#define H5T_UNIX_D64BE		(H5OPEN H5T_UNIX_D64BE_g)
+#define H5T_UNIX_D64LE		(H5OPEN H5T_UNIX_D64LE_g)
+H5_DLLVAR hid_t H5T_UNIX_D32BE_g;
+H5_DLLVAR hid_t H5T_UNIX_D32LE_g;
+H5_DLLVAR hid_t H5T_UNIX_D64BE_g;
+H5_DLLVAR hid_t H5T_UNIX_D64LE_g;
+
+/*
+ * Types particular to the C language.  String types use `bytes' instead
+ * of `bits' as their size.
+ */
+#define H5T_C_S1		(H5OPEN H5T_C_S1_g)
+H5_DLLVAR hid_t H5T_C_S1_g;
+
+/*
+ * Types particular to Fortran.
+ */
+#define H5T_FORTRAN_S1		(H5OPEN H5T_FORTRAN_S1_g)
+H5_DLLVAR hid_t H5T_FORTRAN_S1_g;
+
+/*
+ * These types are for Intel CPU's.  They are little endian with IEEE
+ * floating point.
+ */
+#define H5T_INTEL_I8		H5T_STD_I8LE
+#define H5T_INTEL_I16		H5T_STD_I16LE
+#define H5T_INTEL_I32		H5T_STD_I32LE
+#define H5T_INTEL_I64		H5T_STD_I64LE
+#define H5T_INTEL_U8		H5T_STD_U8LE
+#define H5T_INTEL_U16		H5T_STD_U16LE
+#define H5T_INTEL_U32		H5T_STD_U32LE
+#define H5T_INTEL_U64		H5T_STD_U64LE
+#define H5T_INTEL_B8		H5T_STD_B8LE
+#define H5T_INTEL_B16		H5T_STD_B16LE
+#define H5T_INTEL_B32		H5T_STD_B32LE
+#define H5T_INTEL_B64		H5T_STD_B64LE
+#define H5T_INTEL_F32		H5T_IEEE_F32LE
+#define H5T_INTEL_F64		H5T_IEEE_F64LE
+
+/*
+ * These types are for DEC Alpha CPU's.  They are little endian with IEEE
+ * floating point.
+ */
+#define H5T_ALPHA_I8		H5T_STD_I8LE
+#define H5T_ALPHA_I16		H5T_STD_I16LE
+#define H5T_ALPHA_I32		H5T_STD_I32LE
+#define H5T_ALPHA_I64		H5T_STD_I64LE
+#define H5T_ALPHA_U8		H5T_STD_U8LE
+#define H5T_ALPHA_U16		H5T_STD_U16LE
+#define H5T_ALPHA_U32		H5T_STD_U32LE
+#define H5T_ALPHA_U64		H5T_STD_U64LE
+#define H5T_ALPHA_B8		H5T_STD_B8LE
+#define H5T_ALPHA_B16		H5T_STD_B16LE
+#define H5T_ALPHA_B32		H5T_STD_B32LE
+#define H5T_ALPHA_B64		H5T_STD_B64LE
+#define H5T_ALPHA_F32		H5T_IEEE_F32LE
+#define H5T_ALPHA_F64		H5T_IEEE_F64LE
+
+/*
+ * These types are for MIPS cpu's commonly used in SGI systems. They are big
+ * endian with IEEE floating point.
+ */
+#define H5T_MIPS_I8		H5T_STD_I8BE
+#define H5T_MIPS_I16		H5T_STD_I16BE
+#define H5T_MIPS_I32		H5T_STD_I32BE
+#define H5T_MIPS_I64		H5T_STD_I64BE
+#define H5T_MIPS_U8		H5T_STD_U8BE
+#define H5T_MIPS_U16		H5T_STD_U16BE
+#define H5T_MIPS_U32		H5T_STD_U32BE
+#define H5T_MIPS_U64		H5T_STD_U64BE
+#define H5T_MIPS_B8		H5T_STD_B8BE
+#define H5T_MIPS_B16		H5T_STD_B16BE
+#define H5T_MIPS_B32		H5T_STD_B32BE
+#define H5T_MIPS_B64		H5T_STD_B64BE
+#define H5T_MIPS_F32		H5T_IEEE_F32BE
+#define H5T_MIPS_F64		H5T_IEEE_F64BE
+
+/*
+ * The VAX floating point types (i.e. in VAX byte order)
+ */
+#define H5T_VAX_F32		(H5OPEN H5T_VAX_F32_g)
+#define H5T_VAX_F64		(H5OPEN H5T_VAX_F64_g)
+H5_DLLVAR hid_t H5T_VAX_F32_g;
+H5_DLLVAR hid_t H5T_VAX_F64_g;
+
+/*
+ * The predefined native types. These are the types detected by H5detect and
+ * they violate the naming scheme a little.  Instead of a class name,
+ * precision and byte order as the last component, they have a C-like type
+ * name.  If the type begins with `U' then it is the unsigned version of the
+ * integer type; other integer types are signed.  The type LLONG corresponds
+ * to C's `long long' and LDOUBLE is `long double' (these types might be the
+ * same as `LONG' and `DOUBLE' respectively).
+ */
+#define H5T_NATIVE_CHAR		(CHAR_MIN?H5T_NATIVE_SCHAR:H5T_NATIVE_UCHAR)
+#define H5T_NATIVE_SCHAR        (H5OPEN H5T_NATIVE_SCHAR_g)
+#define H5T_NATIVE_UCHAR        (H5OPEN H5T_NATIVE_UCHAR_g)
+#define H5T_NATIVE_SHORT        (H5OPEN H5T_NATIVE_SHORT_g)
+#define H5T_NATIVE_USHORT       (H5OPEN H5T_NATIVE_USHORT_g)
+#define H5T_NATIVE_INT          (H5OPEN H5T_NATIVE_INT_g)
+#define H5T_NATIVE_UINT         (H5OPEN H5T_NATIVE_UINT_g)
+#define H5T_NATIVE_LONG         (H5OPEN H5T_NATIVE_LONG_g)
+#define H5T_NATIVE_ULONG        (H5OPEN H5T_NATIVE_ULONG_g)
+#define H5T_NATIVE_LLONG        (H5OPEN H5T_NATIVE_LLONG_g)
+#define H5T_NATIVE_ULLONG       (H5OPEN H5T_NATIVE_ULLONG_g)
+#define H5T_NATIVE_FLOAT        (H5OPEN H5T_NATIVE_FLOAT_g)
+#define H5T_NATIVE_DOUBLE       (H5OPEN H5T_NATIVE_DOUBLE_g)
+#if H5_SIZEOF_LONG_DOUBLE !=0
+#define H5T_NATIVE_LDOUBLE	(H5OPEN H5T_NATIVE_LDOUBLE_g)
+#endif
+#define H5T_NATIVE_B8		(H5OPEN H5T_NATIVE_B8_g)
+#define H5T_NATIVE_B16		(H5OPEN H5T_NATIVE_B16_g)
+#define H5T_NATIVE_B32		(H5OPEN H5T_NATIVE_B32_g)
+#define H5T_NATIVE_B64		(H5OPEN H5T_NATIVE_B64_g)
+#define H5T_NATIVE_OPAQUE       (H5OPEN H5T_NATIVE_OPAQUE_g)
+#define H5T_NATIVE_HADDR	(H5OPEN H5T_NATIVE_HADDR_g)
+#define H5T_NATIVE_HSIZE	(H5OPEN H5T_NATIVE_HSIZE_g)
+#define H5T_NATIVE_HSSIZE	(H5OPEN H5T_NATIVE_HSSIZE_g)
+#define H5T_NATIVE_HERR		(H5OPEN H5T_NATIVE_HERR_g)
+#define H5T_NATIVE_HBOOL	(H5OPEN H5T_NATIVE_HBOOL_g)
+H5_DLLVAR hid_t H5T_NATIVE_SCHAR_g;
+H5_DLLVAR hid_t H5T_NATIVE_UCHAR_g;
+H5_DLLVAR hid_t H5T_NATIVE_SHORT_g;
+H5_DLLVAR hid_t H5T_NATIVE_USHORT_g;
+H5_DLLVAR hid_t H5T_NATIVE_INT_g;
+H5_DLLVAR hid_t H5T_NATIVE_UINT_g;
+H5_DLLVAR hid_t H5T_NATIVE_LONG_g;
+H5_DLLVAR hid_t H5T_NATIVE_ULONG_g;
+H5_DLLVAR hid_t H5T_NATIVE_LLONG_g;
+H5_DLLVAR hid_t H5T_NATIVE_ULLONG_g;
+H5_DLLVAR hid_t H5T_NATIVE_FLOAT_g;
+H5_DLLVAR hid_t H5T_NATIVE_DOUBLE_g;
+#if H5_SIZEOF_LONG_DOUBLE !=0
+H5_DLLVAR hid_t H5T_NATIVE_LDOUBLE_g;
+#endif
+H5_DLLVAR hid_t H5T_NATIVE_B8_g;
+H5_DLLVAR hid_t H5T_NATIVE_B16_g;
+H5_DLLVAR hid_t H5T_NATIVE_B32_g;
+H5_DLLVAR hid_t H5T_NATIVE_B64_g;
+H5_DLLVAR hid_t H5T_NATIVE_OPAQUE_g;
+H5_DLLVAR hid_t H5T_NATIVE_HADDR_g;
+H5_DLLVAR hid_t H5T_NATIVE_HSIZE_g;
+H5_DLLVAR hid_t H5T_NATIVE_HSSIZE_g;
+H5_DLLVAR hid_t H5T_NATIVE_HERR_g;
+H5_DLLVAR hid_t H5T_NATIVE_HBOOL_g;
+
+/* C9x integer types */
+#define H5T_NATIVE_INT8			(H5OPEN H5T_NATIVE_INT8_g)
+#define H5T_NATIVE_UINT8		(H5OPEN H5T_NATIVE_UINT8_g)
+#define H5T_NATIVE_INT_LEAST8		(H5OPEN H5T_NATIVE_INT_LEAST8_g)
+#define H5T_NATIVE_UINT_LEAST8		(H5OPEN H5T_NATIVE_UINT_LEAST8_g)
+#define H5T_NATIVE_INT_FAST8 		(H5OPEN H5T_NATIVE_INT_FAST8_g)
+#define H5T_NATIVE_UINT_FAST8		(H5OPEN H5T_NATIVE_UINT_FAST8_g)
+H5_DLLVAR hid_t H5T_NATIVE_INT8_g;
+H5_DLLVAR hid_t H5T_NATIVE_UINT8_g;
+H5_DLLVAR hid_t H5T_NATIVE_INT_LEAST8_g;
+H5_DLLVAR hid_t H5T_NATIVE_UINT_LEAST8_g;
+H5_DLLVAR hid_t H5T_NATIVE_INT_FAST8_g;
+H5_DLLVAR hid_t H5T_NATIVE_UINT_FAST8_g;
+
+#define H5T_NATIVE_INT16		(H5OPEN H5T_NATIVE_INT16_g)
+#define H5T_NATIVE_UINT16		(H5OPEN H5T_NATIVE_UINT16_g)
+#define H5T_NATIVE_INT_LEAST16		(H5OPEN H5T_NATIVE_INT_LEAST16_g)
+#define H5T_NATIVE_UINT_LEAST16		(H5OPEN H5T_NATIVE_UINT_LEAST16_g)
+#define H5T_NATIVE_INT_FAST16		(H5OPEN H5T_NATIVE_INT_FAST16_g)
+#define H5T_NATIVE_UINT_FAST16		(H5OPEN H5T_NATIVE_UINT_FAST16_g)
+H5_DLLVAR hid_t H5T_NATIVE_INT16_g;
+H5_DLLVAR hid_t H5T_NATIVE_UINT16_g;
+H5_DLLVAR hid_t H5T_NATIVE_INT_LEAST16_g;
+H5_DLLVAR hid_t H5T_NATIVE_UINT_LEAST16_g;
+H5_DLLVAR hid_t H5T_NATIVE_INT_FAST16_g;
+H5_DLLVAR hid_t H5T_NATIVE_UINT_FAST16_g;
+
+#define H5T_NATIVE_INT32		(H5OPEN H5T_NATIVE_INT32_g)
+#define H5T_NATIVE_UINT32		(H5OPEN H5T_NATIVE_UINT32_g)
+#define H5T_NATIVE_INT_LEAST32		(H5OPEN H5T_NATIVE_INT_LEAST32_g)
+#define H5T_NATIVE_UINT_LEAST32		(H5OPEN H5T_NATIVE_UINT_LEAST32_g)
+#define H5T_NATIVE_INT_FAST32		(H5OPEN H5T_NATIVE_INT_FAST32_g)
+#define H5T_NATIVE_UINT_FAST32		(H5OPEN H5T_NATIVE_UINT_FAST32_g)
+H5_DLLVAR hid_t H5T_NATIVE_INT32_g;
+H5_DLLVAR hid_t H5T_NATIVE_UINT32_g;
+H5_DLLVAR hid_t H5T_NATIVE_INT_LEAST32_g;
+H5_DLLVAR hid_t H5T_NATIVE_UINT_LEAST32_g;
+H5_DLLVAR hid_t H5T_NATIVE_INT_FAST32_g;
+H5_DLLVAR hid_t H5T_NATIVE_UINT_FAST32_g;
+
+#define H5T_NATIVE_INT64		(H5OPEN H5T_NATIVE_INT64_g)
+#define H5T_NATIVE_UINT64		(H5OPEN H5T_NATIVE_UINT64_g)
+#define H5T_NATIVE_INT_LEAST64		(H5OPEN H5T_NATIVE_INT_LEAST64_g)
+#define H5T_NATIVE_UINT_LEAST64 	(H5OPEN H5T_NATIVE_UINT_LEAST64_g)
+#define H5T_NATIVE_INT_FAST64		(H5OPEN H5T_NATIVE_INT_FAST64_g)
+#define H5T_NATIVE_UINT_FAST64		(H5OPEN H5T_NATIVE_UINT_FAST64_g)
+H5_DLLVAR hid_t H5T_NATIVE_INT64_g;
+H5_DLLVAR hid_t H5T_NATIVE_UINT64_g;
+H5_DLLVAR hid_t H5T_NATIVE_INT_LEAST64_g;
+H5_DLLVAR hid_t H5T_NATIVE_UINT_LEAST64_g;
+H5_DLLVAR hid_t H5T_NATIVE_INT_FAST64_g;
+H5_DLLVAR hid_t H5T_NATIVE_UINT_FAST64_g;
+
+/* Operations defined on all datatypes */
+H5_DLL hid_t H5Tcreate(H5T_class_t type, size_t size);
+H5_DLL hid_t H5Tcopy(hid_t type_id);
+H5_DLL herr_t H5Tclose(hid_t type_id);
+H5_DLL htri_t H5Tequal(hid_t type1_id, hid_t type2_id);
+H5_DLL herr_t H5Tlock(hid_t type_id);
+H5_DLL herr_t H5Tcommit2(hid_t loc_id, const char *name, hid_t type_id,
+    hid_t lcpl_id, hid_t tcpl_id, hid_t tapl_id);
+H5_DLL hid_t H5Topen2(hid_t loc_id, const char *name, hid_t tapl_id);
+H5_DLL herr_t H5Tcommit_anon(hid_t loc_id, hid_t type_id, hid_t tcpl_id, hid_t tapl_id);
+H5_DLL hid_t H5Tget_create_plist(hid_t type_id);
+H5_DLL htri_t H5Tcommitted(hid_t type_id);
+H5_DLL herr_t H5Tencode(hid_t obj_id, void *buf, size_t *nalloc);
+H5_DLL hid_t H5Tdecode(const void *buf);
+
+/* Operations defined on compound datatypes */
+H5_DLL herr_t H5Tinsert(hid_t parent_id, const char *name, size_t offset,
+			 hid_t member_id);
+H5_DLL herr_t H5Tpack(hid_t type_id);
+
+/* Operations defined on enumeration datatypes */
+H5_DLL hid_t H5Tenum_create(hid_t base_id);
+H5_DLL herr_t H5Tenum_insert(hid_t type, const char *name, const void *value);
+H5_DLL herr_t H5Tenum_nameof(hid_t type, const void *value, char *name/*out*/,
+			     size_t size);
+H5_DLL herr_t H5Tenum_valueof(hid_t type, const char *name,
+			      void *value/*out*/);
+
+/* Operations defined on variable-length datatypes */
+H5_DLL hid_t H5Tvlen_create(hid_t base_id);
+
+/* Operations defined on array datatypes */
+H5_DLL hid_t H5Tarray_create2(hid_t base_id, unsigned ndims,
+            const hsize_t dim[/* ndims */]);
+H5_DLL int H5Tget_array_ndims(hid_t type_id);
+H5_DLL int H5Tget_array_dims2(hid_t type_id, hsize_t dims[]);
+
+/* Operations defined on opaque datatypes */
+H5_DLL herr_t H5Tset_tag(hid_t type, const char *tag);
+H5_DLL char *H5Tget_tag(hid_t type);
+
+/* Querying property values */
+H5_DLL hid_t H5Tget_super(hid_t type);
+H5_DLL H5T_class_t H5Tget_class(hid_t type_id);
+H5_DLL htri_t H5Tdetect_class(hid_t type_id, H5T_class_t cls);
+H5_DLL size_t H5Tget_size(hid_t type_id);
+H5_DLL H5T_order_t H5Tget_order(hid_t type_id);
+H5_DLL size_t H5Tget_precision(hid_t type_id);
+H5_DLL int H5Tget_offset(hid_t type_id);
+H5_DLL herr_t H5Tget_pad(hid_t type_id, H5T_pad_t *lsb/*out*/,
+			  H5T_pad_t *msb/*out*/);
+H5_DLL H5T_sign_t H5Tget_sign(hid_t type_id);
+H5_DLL herr_t H5Tget_fields(hid_t type_id, size_t *spos/*out*/,
+			     size_t *epos/*out*/, size_t *esize/*out*/,
+			     size_t *mpos/*out*/, size_t *msize/*out*/);
+H5_DLL size_t H5Tget_ebias(hid_t type_id);
+H5_DLL H5T_norm_t H5Tget_norm(hid_t type_id);
+H5_DLL H5T_pad_t H5Tget_inpad(hid_t type_id);
+H5_DLL H5T_str_t H5Tget_strpad(hid_t type_id);
+H5_DLL int H5Tget_nmembers(hid_t type_id);
+H5_DLL char *H5Tget_member_name(hid_t type_id, unsigned membno);
+H5_DLL int H5Tget_member_index(hid_t type_id, const char *name);
+H5_DLL size_t H5Tget_member_offset(hid_t type_id, unsigned membno);
+H5_DLL H5T_class_t H5Tget_member_class(hid_t type_id, unsigned membno);
+H5_DLL hid_t H5Tget_member_type(hid_t type_id, unsigned membno);
+H5_DLL herr_t H5Tget_member_value(hid_t type_id, unsigned membno, void *value/*out*/);
+H5_DLL H5T_cset_t H5Tget_cset(hid_t type_id);
+H5_DLL htri_t H5Tis_variable_str(hid_t type_id);
+H5_DLL hid_t H5Tget_native_type(hid_t type_id, H5T_direction_t direction);
+
+/* Setting property values */
+H5_DLL herr_t H5Tset_size(hid_t type_id, size_t size);
+H5_DLL herr_t H5Tset_order(hid_t type_id, H5T_order_t order);
+H5_DLL herr_t H5Tset_precision(hid_t type_id, size_t prec);
+H5_DLL herr_t H5Tset_offset(hid_t type_id, size_t offset);
+H5_DLL herr_t H5Tset_pad(hid_t type_id, H5T_pad_t lsb, H5T_pad_t msb);
+H5_DLL herr_t H5Tset_sign(hid_t type_id, H5T_sign_t sign);
+H5_DLL herr_t H5Tset_fields(hid_t type_id, size_t spos, size_t epos,
+			     size_t esize, size_t mpos, size_t msize);
+H5_DLL herr_t H5Tset_ebias(hid_t type_id, size_t ebias);
+H5_DLL herr_t H5Tset_norm(hid_t type_id, H5T_norm_t norm);
+H5_DLL herr_t H5Tset_inpad(hid_t type_id, H5T_pad_t pad);
+H5_DLL herr_t H5Tset_cset(hid_t type_id, H5T_cset_t cset);
+H5_DLL herr_t H5Tset_strpad(hid_t type_id, H5T_str_t strpad);
+
+/* Type conversion database */
+H5_DLL herr_t H5Tregister(H5T_pers_t pers, const char *name, hid_t src_id,
+			   hid_t dst_id, H5T_conv_t func);
+H5_DLL herr_t H5Tunregister(H5T_pers_t pers, const char *name, hid_t src_id,
+			     hid_t dst_id, H5T_conv_t func);
+H5_DLL H5T_conv_t H5Tfind(hid_t src_id, hid_t dst_id, H5T_cdata_t **pcdata);
+H5_DLL htri_t H5Tcompiler_conv(hid_t src_id, hid_t dst_id);
+H5_DLL herr_t H5Tconvert(hid_t src_id, hid_t dst_id, size_t nelmts,
+			  void *buf, void *background, hid_t plist_id);
+
+/* Symbols defined for compatibility with previous versions of the HDF5 API.
+ *
+ * Use of these symbols is deprecated.
+ */
+#ifndef H5_NO_DEPRECATED_SYMBOLS
+
+/* Macros */
+
+
+/* Typedefs */
+
+
+/* Function prototypes */
+H5_DLL herr_t H5Tcommit1(hid_t loc_id, const char *name, hid_t type_id);
+H5_DLL hid_t H5Topen1(hid_t loc_id, const char *name);
+H5_DLL hid_t H5Tarray_create1(hid_t base_id, int ndims,
+            const hsize_t dim[/* ndims */],
+            const int perm[/* ndims */]);
+H5_DLL int H5Tget_array_dims1(hid_t type_id, hsize_t dims[], int perm[]);
+
+#endif /* H5_NO_DEPRECATED_SYMBOLS */
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* _H5Tpublic_H */
+
diff --git a/privatemodules/nc4/include/H5Zpublic.h b/privatemodules/nc4/include/H5Zpublic.h
new file mode 100644
index 0000000000000000000000000000000000000000..8daa5f490d32fb8af75f11fbb07d9e08008f16ea
--- /dev/null
+++ b/privatemodules/nc4/include/H5Zpublic.h
@@ -0,0 +1,250 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/* Programmer:  Robb Matzke <matzke@llnl.gov>
+ *              Thursday, April 16, 1998
+ */
+
+#ifndef _H5Zpublic_H
+#define _H5Zpublic_H
+
+/* Public headers needed by this file */
+#include "H5public.h"
+
+/*
+ * Filter identifiers.  Values 0 through 255 are for filters defined by the
+ * HDF5 library.  Values 256 through 511 are available for testing new
+ * filters. Subsequent values should be obtained from the HDF5 development
+ * team at hdf5dev@ncsa.uiuc.edu.  These values will never change because they
+ * appear in the HDF5 files.
+ */
+typedef int H5Z_filter_t;
+
+/* Filter IDs */
+#define H5Z_FILTER_ERROR	(-1)	/*no filter			*/
+#define H5Z_FILTER_NONE		0	/*reserved indefinitely		*/
+#define H5Z_FILTER_DEFLATE	1 	/*deflation like gzip	     	*/
+#define H5Z_FILTER_SHUFFLE      2       /*shuffle the data              */
+#define H5Z_FILTER_FLETCHER32   3       /*fletcher32 checksum of EDC    */
+#define H5Z_FILTER_SZIP         4       /*szip compression              */
+#define H5Z_FILTER_NBIT         5       /*nbit compression              */
+#define H5Z_FILTER_SCALEOFFSET  6       /*scale+offset compression      */
+#define H5Z_FILTER_RESERVED     256	/*filter ids below this value are reserved for library use */
+
+#define H5Z_FILTER_MAX		65535	/*maximum filter id		*/
+
+/* General macros */
+#define H5Z_FILTER_ALL	 	0	/* Symbol to remove all filters in H5Premove_filter */
+#define H5Z_MAX_NFILTERS        32      /* Maximum number of filters allowed in a pipeline */
+                                        /* (should probably be allowed to be an
+                                         * unlimited amount, but currently each
+                                         * filter uses a bit in a 32-bit field,
+                                         * so the format would have to be
+                                         * changed to accomodate that)
+                                         */
+
+/* Flags for filter definition (stored) */
+#define H5Z_FLAG_DEFMASK	0x00ff	/*definition flag mask		*/
+#define H5Z_FLAG_MANDATORY      0x0000  /*filter is mandatory		*/
+#define H5Z_FLAG_OPTIONAL	0x0001	/*filter is optional		*/
+
+/* Additional flags for filter invocation (not stored) */
+#define H5Z_FLAG_INVMASK	0xff00	/*invocation flag mask		*/
+#define H5Z_FLAG_REVERSE	0x0100	/*reverse direction; read	*/
+#define H5Z_FLAG_SKIP_EDC	0x0200	/*skip EDC filters for read	*/
+
+/* Special parameters for szip compression */
+/* [These are aliases for the similar definitions in szlib.h, which we can't
+ * include directly due to the duplication of various symbols with the zlib.h
+ * header file] */
+#define H5_SZIP_ALLOW_K13_OPTION_MASK   1
+#define H5_SZIP_CHIP_OPTION_MASK        2
+#define H5_SZIP_EC_OPTION_MASK          4
+#define H5_SZIP_NN_OPTION_MASK          32
+#define H5_SZIP_MAX_PIXELS_PER_BLOCK    32
+
+/* Macros for the shuffle filter */
+#define H5Z_SHUFFLE_USER_NPARMS    0    /* Number of parameters that users can set */
+#define H5Z_SHUFFLE_TOTAL_NPARMS   1    /* Total number of parameters for filter */
+
+/* Macros for the szip filter */
+#define H5Z_SZIP_USER_NPARMS    2       /* Number of parameters that users can set */
+#define H5Z_SZIP_TOTAL_NPARMS   4       /* Total number of parameters for filter */
+#define H5Z_SZIP_PARM_MASK      0       /* "User" parameter for option mask */
+#define H5Z_SZIP_PARM_PPB       1       /* "User" parameter for pixels-per-block */
+#define H5Z_SZIP_PARM_BPP       2       /* "Local" parameter for bits-per-pixel */
+#define H5Z_SZIP_PARM_PPS       3       /* "Local" parameter for pixels-per-scanline */
+
+/* Macros for the nbit filter */
+#define H5Z_NBIT_USER_NPARMS     0     /* Number of parameters that users can set */
+
+/* Macros for the scale offset filter */
+#define H5Z_SCALEOFFSET_USER_NPARMS      2    /* Number of parameters that users can set */
+
+
+/* Special parameters for ScaleOffset filter*/
+#define H5Z_SO_INT_MINBITS_DEFAULT 0
+typedef enum H5Z_SO_scale_type_t {
+    H5Z_SO_FLOAT_DSCALE = 0,
+    H5Z_SO_FLOAT_ESCALE = 1,
+    H5Z_SO_INT          = 2
+} H5Z_SO_scale_type_t;
+
+/* Current version of the H5Z_class_t struct */
+#define H5Z_CLASS_T_VERS (1)
+
+/* Values to decide if EDC is enabled for reading data */
+typedef enum H5Z_EDC_t {
+    H5Z_ERROR_EDC       = -1,   /* error value */
+    H5Z_DISABLE_EDC     = 0,
+    H5Z_ENABLE_EDC      = 1,
+    H5Z_NO_EDC          = 2     /* must be the last */
+} H5Z_EDC_t;
+
+/* Bit flags for H5Zget_filter_info */
+#define H5Z_FILTER_CONFIG_ENCODE_ENABLED (0x0001)
+#define H5Z_FILTER_CONFIG_DECODE_ENABLED (0x0002)
+
+/* Return values for filter callback function */
+typedef enum H5Z_cb_return_t {
+    H5Z_CB_ERROR  = -1,
+    H5Z_CB_FAIL   = 0,    /* I/O should fail if filter fails. */
+    H5Z_CB_CONT   = 1,    /* I/O continues if filter fails.   */
+    H5Z_CB_NO     = 2
+} H5Z_cb_return_t;
+
+/* Filter callback function definition */
+typedef H5Z_cb_return_t (*H5Z_filter_func_t)(H5Z_filter_t filter, void* buf,
+                                size_t buf_size, void* op_data);
+
+/* Structure for filter callback property */
+typedef struct H5Z_cb_t {
+    H5Z_filter_func_t func;
+    void*              op_data;
+} H5Z_cb_t;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Before a dataset gets created, the "can_apply" callbacks for any filters used
+ * in the dataset creation property list are called
+ * with the dataset's dataset creation property list, the dataset's datatype and
+ * a dataspace describing a chunk (for chunked dataset storage).
+ *
+ * The "can_apply" callback must determine if the combination of the dataset
+ * creation property list setting, the datatype and the dataspace represent a
+ * valid combination to apply this filter to.  For example, some cases of
+ * invalid combinations may involve the filter not operating correctly on
+ * certain datatypes (or certain datatype sizes), or certain sizes of the chunk
+ * dataspace.
+ *
+ * The "can_apply" callback can be the NULL pointer, in which case, the library
+ * will assume that it can apply to any combination of dataset creation
+ * property list values, datatypes and dataspaces.
+ *
+ * The "can_apply" callback returns positive a valid combination, zero for an
+ * invalid combination and negative for an error.
+ */
+typedef htri_t (*H5Z_can_apply_func_t)(hid_t dcpl_id, hid_t type_id, hid_t space_id);
+
+/*
+ * After the "can_apply" callbacks are checked for new datasets, the "set_local"
+ * callbacks for any filters used in the dataset creation property list are
+ * called.  These callbacks receive the dataset's private copy of the dataset
+ * creation property list passed in to H5Dcreate (i.e. not the actual property
+ * list passed in to H5Dcreate) and the datatype ID passed in to H5Dcreate
+ * (which is not copied and should not be modified) and a dataspace describing
+ * the chunk (for chunked dataset storage) (which should also not be modified).
+ *
+ * The "set_local" callback must set any parameters that are specific to this
+ * dataset, based on the combination of the dataset creation property list
+ * values, the datatype and the dataspace.  For example, some filters perform
+ * different actions based on different datatypes (or datatype sizes) or
+ * different number of dimensions or dataspace sizes.
+ *
+ * The "set_local" callback can be the NULL pointer, in which case, the library
+ * will assume that there are no dataset-specific settings for this filter.
+ *
+ * The "set_local" callback must return non-negative on success and negative
+ * for an error.
+ */
+typedef herr_t (*H5Z_set_local_func_t)(hid_t dcpl_id, hid_t type_id, hid_t space_id);
+
+/*
+ * A filter gets definition flags and invocation flags (defined above), the
+ * client data array and size defined when the filter was added to the
+ * pipeline, the size in bytes of the data on which to operate, and pointers
+ * to a buffer and its allocated size.
+ *
+ * The filter should store the result in the supplied buffer if possible,
+ * otherwise it can allocate a new buffer, freeing the original.  The
+ * allocated size of the new buffer should be returned through the BUF_SIZE
+ * pointer and the new buffer through the BUF pointer.
+ *
+ * The return value from the filter is the number of bytes in the output
+ * buffer. If an error occurs then the function should return zero and leave
+ * all pointer arguments unchanged.
+ */
+typedef size_t (*H5Z_func_t)(unsigned int flags, size_t cd_nelmts,
+			     const unsigned int cd_values[], size_t nbytes,
+			     size_t *buf_size, void **buf);
+
+/*
+ * The filter table maps filter identification numbers to structs that
+ * contain a pointers to the filter function and timing statistics.
+ */
+typedef struct H5Z_class2_t {
+    int version;                /* Version number of the H5Z_class_t struct */
+    H5Z_filter_t id;		/* Filter ID number			     */
+    unsigned encoder_present;   /* Does this filter have an encoder? */
+    unsigned decoder_present;   /* Does this filter have a decoder? */
+    const char	*name;		/* Comment for debugging		     */
+    H5Z_can_apply_func_t can_apply; /* The "can apply" callback for a filter */
+    H5Z_set_local_func_t set_local; /* The "set local" callback for a filter */
+    H5Z_func_t filter;		/* The actual filter function		     */
+} H5Z_class2_t;
+
+H5_DLL herr_t H5Zregister(const void *cls);
+H5_DLL herr_t H5Zunregister(H5Z_filter_t id);
+H5_DLL htri_t H5Zfilter_avail(H5Z_filter_t id);
+H5_DLL herr_t H5Zget_filter_info(H5Z_filter_t filter, unsigned int *filter_config_flags);
+
+/* Symbols defined for compatibility with previous versions of the HDF5 API.
+ *
+ * Use of these symbols is deprecated.
+ */
+#ifndef H5_NO_DEPRECATED_SYMBOLS
+
+/*
+ * The filter table maps filter identification numbers to structs that
+ * contain a pointers to the filter function and timing statistics.
+ */
+typedef struct H5Z_class1_t {
+    H5Z_filter_t id;		/* Filter ID number			     */
+    const char	*name;		/* Comment for debugging		     */
+    H5Z_can_apply_func_t can_apply; /* The "can apply" callback for a filter */
+    H5Z_set_local_func_t set_local; /* The "set local" callback for a filter */
+    H5Z_func_t filter;		/* The actual filter function		     */
+} H5Z_class1_t;
+
+#endif /* H5_NO_DEPRECATED_SYMBOLS */
+
+#ifdef __cplusplus
+}
+#endif
+#endif
+
diff --git a/privatemodules/nc4/include/H5api_adpt.h b/privatemodules/nc4/include/H5api_adpt.h
new file mode 100644
index 0000000000000000000000000000000000000000..845a9a0c9753f1451afb45018bc18d21e66dfebc
--- /dev/null
+++ b/privatemodules/nc4/include/H5api_adpt.h
@@ -0,0 +1,424 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * H5api_adpt.h
+ * Used for the HDF5 dll project
+ * Created by Patrick Lu on 1/12/99
+ */
+#ifndef H5API_ADPT_H
+#define H5API_ADPT_H
+
+/* This will only be defined if HDF5 was built with CMake */
+#ifdef H5_BUILT_AS_DYNAMIC_LIB
+
+#if defined (hdf5_EXPORTS)
+  #define _HDF5DLL_
+#else
+  #define _HDF5USEDLL_
+#endif
+
+#if defined (hdf5_test_EXPORTS)
+  #define _HDF5TESTDLL_
+#else
+  #define _HDF5TESTUSEDLL_
+#endif
+
+#if defined (hdf5_tools_EXPORTS)
+  #define _HDF5TOOLSDLL_
+#else
+  #define _HDF5TOOLSUSEDLL_
+#endif
+
+#if defined (hdf5_cpp_EXPORTS)
+  #define HDF5_CPPDLL_EXPORTS
+#else
+  #define HDF5CPP_USEDLL
+#endif
+
+#if defined (hdf5_hl_EXPORTS)
+  #define _HDF5_HLDLL_EXPORTS_
+#else
+  #define _HDF5USEHLDLL_
+#endif
+
+#if defined (hdf5_hl_cpp_EXPORTS)
+  #define HDF5_HL_CPPDLL_EXPORTS
+#else
+  #define HDF5USE_HLCPPDLL
+#endif
+
+#if defined (hdf5_f90cstub_EXPORTS)
+  #define HDF5FORT_CSTUB_DLL_EXPORTS
+#else
+  #define HDF5FORT_CSTUB_USEDLL
+#endif
+
+#if defined (hdf5_test_f90cstub_EXPORTS)
+  #define HDF5FORTTEST_CSTUB_DLL_EXPORTS
+#endif
+
+#if defined (hdf5_hl_f90cstub_EXPORTS)
+  #define HDF5_HL_F90CSTUBDLL_EXPORTS
+#endif
+
+#if defined(hdf5_EXPORTS)
+  #if defined (_MSC_VER)  /* MSVC Compiler Case */
+    #define H5_DLL __declspec(dllexport)
+    #define H5_DLLVAR extern __declspec(dllexport)
+  #elif (__GNUC__ >= 4)  /* GCC 4.x has support for visibility options */
+    #define H5_DLL __attribute__ ((visibility("default")))
+    #define H5_DLLVAR extern __attribute__ ((visibility("default")))
+  #endif
+#else
+  #if defined (_MSC_VER)  /* MSVC Compiler Case */
+    #define H5_DLL __declspec(dllimport)
+    #define H5_DLLVAR __declspec(dllimport)
+  #elif (__GNUC__ >= 4)  /* GCC 4.x has support for visibility options */
+    #define H5_DLL __attribute__ ((visibility("default")))
+    #define H5_DLLVAR extern __attribute__ ((visibility("default")))
+  #endif
+#endif
+
+#ifndef H5_DLL
+  #define H5_DLL
+  #define H5_DLLVAR extern
+#endif /* _HDF5DLL_ */
+
+#if defined(hdf5_test_EXPORTS)
+  #if defined (_MSC_VER)  /* MSVC Compiler Case */
+    #define H5TEST_DLL __declspec(dllexport)
+    #define H5TEST_DLLVAR extern __declspec(dllexport)
+  #elif (__GNUC__ >= 4)  /* GCC 4.x has support for visibility options */
+    #define H5TEST_DLL __attribute__ ((visibility("default")))
+    #define H5TEST_DLLVAR extern __attribute__ ((visibility("default")))
+  #endif
+#else
+  #if defined (_MSC_VER)  /* MSVC Compiler Case */
+    #define H5TEST_DLL __declspec(dllimport)
+    #define H5TEST_DLLVAR __declspec(dllimport)
+  #elif (__GNUC__ >= 4)  /* GCC 4.x has support for visibility options */
+    #define H5TEST_DLL __attribute__ ((visibility("default")))
+    #define H5TEST_DLLVAR extern __attribute__ ((visibility("default")))
+  #endif
+#endif
+
+#ifndef H5TEST_DLL
+  #define H5TEST_DLL
+  #define H5TEST_DLLVAR extern
+#endif /* H5TEST_DLL */
+
+#if defined(hdf5_tools_EXPORTS)
+  #if defined (_MSC_VER)  /* MSVC Compiler Case */
+    #define H5TOOLS_DLL __declspec(dllexport)
+    #define H5TOOLS_DLLVAR extern __declspec(dllexport)
+  #elif (__GNUC__ >= 4)  /* GCC 4.x has support for visibility options */
+    #define H5TOOLS_DLL __attribute__ ((visibility("default")))
+    #define H5TOOLS_DLLVAR extern __attribute__ ((visibility("default")))
+  #endif
+#else
+  #if defined (_MSC_VER)  /* MSVC Compiler Case */
+    #define H5TOOLS_DLL __declspec(dllimport)
+    #define H5TOOLS_DLLVAR __declspec(dllimport)
+  #elif (__GNUC__ >= 4)  /* GCC 4.x has support for visibility options */
+    #define H5TOOLS_DLL __attribute__ ((visibility("default")))
+    #define H5TOOLS_DLLVAR extern __attribute__ ((visibility("default")))
+  #endif
+#endif
+
+#ifndef H5TOOLS_DLL
+  #define H5TOOLS_DLL
+  #define H5TOOLS_DLLVAR extern
+#endif /* H5TOOLS_DLL */
+
+#if defined(hdf5_cpp_EXPORTS)
+  #if defined (_MSC_VER)  /* MSVC Compiler Case */
+    #define H5_DLLCPP __declspec(dllexport)
+    #define H5_DLLCPPVAR extern __declspec(dllexport)
+  #elif (__GNUC__ >= 4)  /* GCC 4.x has support for visibility options */
+    #define H5_DLLCPP __attribute__ ((visibility("default")))
+    #define H5_DLLCPPVAR extern __attribute__ ((visibility("default")))
+  #endif
+#else
+  #if defined (_MSC_VER)  /* MSVC Compiler Case */
+    #define H5_DLLCPP __declspec(dllimport)
+    #define H5_DLLCPPVAR __declspec(dllimport)
+  #elif (__GNUC__ >= 4)  /* GCC 4.x has support for visibility options */
+    #define H5_DLLCPP __attribute__ ((visibility("default")))
+    #define H5_DLLCPPVAR extern __attribute__ ((visibility("default")))
+  #endif
+#endif
+
+#ifndef H5_DLLCPP
+  #define H5_DLLCPP
+  #define H5_DLLCPPVAR extern
+#endif /* H5_DLLCPP */
+
+#if defined(hdf5_hl_EXPORTS)
+  #if defined (_MSC_VER)  /* MSVC Compiler Case */
+    #define H5_HLDLL __declspec(dllexport)
+    #define H5_HLDLLVAR extern __declspec(dllexport)
+  #elif (__GNUC__ >= 4)  /* GCC 4.x has support for visibility options */
+    #define H5_HLDLL __attribute__ ((visibility("default")))
+    #define H5_HLDLLVAR extern __attribute__ ((visibility("default")))
+  #endif
+#else
+  #if defined (_MSC_VER)  /* MSVC Compiler Case */
+    #define H5_HLDLL __declspec(dllimport)
+    #define H5_HLDLLVAR __declspec(dllimport)
+  #elif (__GNUC__ >= 4)  /* GCC 4.x has support for visibility options */
+    #define H5_HLDLL __attribute__ ((visibility("default")))
+    #define H5_HLDLLVAR extern __attribute__ ((visibility("default")))
+  #endif
+#endif
+
+#ifndef H5_HLDLL
+  #define H5_HLDLL
+  #define H5_HLDLLVAR extern
+#endif /* H5_HLDLL */
+
+#if defined(hdf5_hl_cpp_EXPORTS)
+  #if defined (_MSC_VER)  /* MSVC Compiler Case */
+    #define H5_HLCPPDLL __declspec(dllexport)
+    #define H5_HLCPPDLLVAR extern __declspec(dllexport)
+  #elif (__GNUC__ >= 4)  /* GCC 4.x has support for visibility options */
+    #define H5_HLCPPDLL __attribute__ ((visibility("default")))
+    #define H5_HLCPPDLLVAR extern __attribute__ ((visibility("default")))
+  #endif
+#else
+  #if defined (_MSC_VER)  /* MSVC Compiler Case */
+    #define H5_HLCPPDLL __declspec(dllimport)
+    #define H5_HLCPPDLLVAR __declspec(dllimport)
+  #elif (__GNUC__ >= 4)  /* GCC 4.x has support for visibility options */
+    #define H5_HLCPPDLL __attribute__ ((visibility("default")))
+    #define H5_HLCPPDLLVAR extern __attribute__ ((visibility("default")))
+  #endif
+#endif
+
+#ifndef H5_HLCPPDLL
+  #define H5_HLCPPDLL
+  #define H5_HLCPPDLLVAR extern
+#endif /* H5_HLCPPDLL */
+
+#if defined(hdf5_f90cstub_EXPORTS)
+  #if defined (_MSC_VER)  /* MSVC Compiler Case */
+    #define H5_FCDLL __declspec(dllexport)
+    #define H5_FCDLLVAR extern __declspec(dllexport)
+  #elif (__GNUC__ >= 4)  /* GCC 4.x has support for visibility options */
+    #define H5_FCDLL __attribute__ ((visibility("default")))
+    #define H5_FCDLLVAR extern __attribute__ ((visibility("default")))
+  #endif
+#else
+  #if defined (_MSC_VER)  /* MSVC Compiler Case */
+    #define H5_FCDLL __declspec(dllimport)
+    #define H5_FCDLLVAR __declspec(dllimport)
+  #elif (__GNUC__ >= 4)  /* GCC 4.x has support for visibility options */
+    #define H5_FCDLL __attribute__ ((visibility("default")))
+    #define H5_FCDLLVAR extern __attribute__ ((visibility("default")))
+  #endif
+#endif
+
+#ifndef H5_FCDLL
+  #define H5_FCDLL
+  #define H5_FCDLLVAR extern
+#endif /* H5_FCDLL */
+
+#if defined(hdf5_test_f90cstub_EXPORTS)
+  #if defined (_MSC_VER)  /* MSVC Compiler Case */
+    #define H5_FCTESTDLL __declspec(dllexport)
+    #define H5_FCTESTDLLVAR extern __declspec(dllexport)
+  #elif (__GNUC__ >= 4)  /* GCC 4.x has support for visibility options */
+    #define H5_FCTESTDLL __attribute__ ((visibility("default")))
+    #define H5_FCTESTDLLVAR extern __attribute__ ((visibility("default")))
+  #endif
+#else
+  #if defined (_MSC_VER)  /* MSVC Compiler Case */
+    #define H5_FCTESTDLL __declspec(dllimport)
+    #define H5_FCTESTDLLVAR __declspec(dllimport)
+  #elif (__GNUC__ >= 4)  /* GCC 4.x has support for visibility options */
+    #define H5_FCTESTDLL __attribute__ ((visibility("default")))
+    #define H5_FCTESTDLLVAR extern __attribute__ ((visibility("default")))
+  #endif
+#endif
+
+#ifndef H5_FCTESTDLL
+  #define H5_FCTESTDLL
+  #define H5_FCTESTDLLVAR extern
+#endif /* H5_FCTESTDLL */
+
+#if defined(hdf5_hl_f90cstub_EXPORTS)
+  #if defined (_MSC_VER)  /* MSVC Compiler Case */
+    #define HDF5_HL_F90CSTUBDLL __declspec(dllexport)
+    #define HDF5_HL_F90CSTUBDLLVAR extern __declspec(dllexport)
+  #elif (__GNUC__ >= 4)  /* GCC 4.x has support for visibility options */
+    #define HDF5_HL_F90CSTUBDLL __attribute__ ((visibility("default")))
+    #define HDF5_HL_F90CSTUBDLLVAR extern __attribute__ ((visibility("default")))
+  #endif
+#else
+  #if defined (_MSC_VER)  /* MSVC Compiler Case */
+    #define HDF5_HL_F90CSTUBDLL __declspec(dllimport)
+    #define HDF5_HL_F90CSTUBDLLVAR __declspec(dllimport)
+  #elif (__GNUC__ >= 4)  /* GCC 4.x has support for visibility options */
+    #define HDF5_HL_F90CSTUBDLL __attribute__ ((visibility("default")))
+    #define HDF5_HL_F90CSTUBDLLVAR extern __attribute__ ((visibility("default")))
+  #endif
+#endif
+
+#ifndef HDF5_HL_F90CSTUBDLL
+  #define HDF5_HL_F90CSTUBDLL
+  #define HDF5_HL_F90CSTUBDLLVAR extern
+#endif /* HDF5_HL_F90CSTUBDLL */
+
+#elif defined(H5_BUILT_AS_STATIC_LIB)
+  #define H5_DLL
+  #define H5_HLDLL
+  #define H5_HLCPPDLL
+  #define HDF5_HL_F90CSTUBDLL
+  #define H5_DLLVAR extern
+  #define H5_DLLCPP
+  #define H5TEST_DLL
+  #define H5TEST_DLLVAR extern
+  #define H5TOOLS_DLL
+  #define H5TOOLS_DLLVAR extern
+  #define H5_FCDLL
+  #define H5_FCDLLVAR extern
+  #define H5_FCTESTDLL
+  #define H5_FCTESTDLLVAR extern
+
+#else
+/* This is the original HDFGroup defined preprocessor code which should still work
+ * with the VS projects that are maintained by "The HDF Group"
+ * The Visual Studio project files will not be supported in the next major release of 1.10.
+ */
+
+#if defined(H5_HAVE_WIN32_API)
+
+#if defined(_HDF5DLL_)
+#pragma warning(disable: 4273)  /* Disable the dll linkage warnings */
+#define H5_DLL __declspec(dllexport)
+#define H5_DLLVAR extern __declspec(dllexport)
+#elif defined(_HDF5USEDLL_)
+#define H5_DLL __declspec(dllimport)
+#define H5_DLLVAR __declspec(dllimport)
+#else
+#define H5_DLL
+#define H5_DLLVAR extern
+#endif /* _HDF5DLL_ */
+
+#if defined(_HDF5TESTDLL_)
+#pragma warning(disable: 4273)  /* Disable the dll linkage warnings */
+#define H5TEST_DLL __declspec(dllexport)
+#define H5TEST_DLLVAR extern __declspec(dllexport)
+#elif defined(_HDF5TESTUSEDLL_)
+#define H5TEST_DLL __declspec(dllimport)
+#define H5TEST_DLLVAR __declspec(dllimport)
+#else
+#define H5TEST_DLL
+#define H5TEST_DLLVAR extern
+#endif /* _HDF5TESTDLL_ */
+
+#if defined(_HDF5TOOLSDLL_)
+#pragma warning(disable: 4273)  /* Disable the dll linkage warnings */
+#define H5TOOLS_DLL __declspec(dllexport)
+#define H5TOOLS_DLLVAR extern __declspec(dllexport)
+#elif defined(_HDF5TOOLSUSEDLL_)
+#define H5TOOLS_DLL __declspec(dllimport)
+#define H5TOOLS_DLLVAR __declspec(dllimport)
+#else
+#define H5TOOLS_DLL
+#define H5TOOLS_DLLVAR extern
+#endif /* _HDF5TOOLSDLL_ */
+
+#if defined(_HDF5_HLDLL_EXPORTS_)
+#pragma warning(disable: 4273)  /* Disable the dll linkage warnings */
+#define H5_HLDLL __declspec(dllexport)
+#elif defined(_HDF5USEHLDLL_)
+#define H5_HLDLL __declspec(dllimport)
+#else
+#define H5_HLDLL
+#endif /* _HDF5_HLDLL_EXPORTS */
+
+#if defined(HDF5_HL_CPPDLL_EXPORTS)
+#pragma warning(disable: 4273)  /* Disable the dll linkage warnings */
+#define H5_HLCPPDLL __declspec(dllexport)
+#elif defined(HDF5USE_HLCPPDLL)
+#define H5_HLCPPDLL __declspec(dllimport)
+#else
+#define H5_HLCPPDLL
+#endif /*HDF5_HL_CPPDLL_EXPORTS*/
+
+#if defined(HDF5_HL_F90CSTUBDLL_EXPORTS)
+#pragma warning(disable: 4273)  /* Disable the dll linkage warnings */
+#define HDF5_HL_F90CSTUBDLL __declspec(dllexport)
+#elif defined(HDF5USE_HLF90CSTUBDLL)
+#define HDF5_HL_F90CSTUBDLL __declspec(dllimport)
+#else
+#define HDF5_HL_F90CSTUBDLL
+#endif /*HDF5_HL_F90CSTUBDLL_EXPORTS*/
+
+
+#if defined(HDF5FORT_CSTUB_DLL_EXPORTS)
+#pragma warning(disable: 4273)  /* Disable the dll linkage warnings */
+#define H5_FCDLL __declspec(dllexport)
+#define H5_FCDLLVAR extern __declspec(dllexport)
+#elif defined(HDF5FORT_CSTUB_USEDLL)
+#define H5_FCDLL __declspec(dllimport)
+#define H5_FCDLLVAR __declspec(dllimport)
+#else
+#define H5_FCDLL
+#define H5_FCDLLVAR extern
+#endif /* _HDF5_FORTRANDLL_EXPORTS_ */
+
+#if defined(HDF5FORTTEST_CSTUB_DLL_EXPORTS)
+#pragma warning(disable: 4273)  /* Disable the dll linkage warnings */
+#define H5_FCTESTDLL __declspec(dllexport)
+#define H5_FCTESTDLLVAR extern __declspec(dllexport)
+#elif defined(HDF5FORTTEST_CSTUB_USEDLL)
+#define H5_FCTESTDLL __declspec(dllimport)
+#define H5_FCTESTDLLVAR __declspec(dllimport)
+#else
+#define H5_FCTESTDLL
+#define H5_FCTESTDLLVAR extern
+#endif /* _HDF5_FORTRANDLL_EXPORTS_ */
+
+/* Added to export or to import C++ APIs - BMR (02-15-2002) */
+#if defined(HDF5_CPPDLL_EXPORTS) /* this name is generated at creation */
+#define H5_DLLCPP __declspec(dllexport)
+#elif defined(HDF5CPP_USEDLL)
+#define H5_DLLCPP __declspec(dllimport)
+#else
+#define H5_DLLCPP
+#endif /* HDF5_CPPDLL_EXPORTS */
+
+#else /*H5_HAVE_WIN32_API*/
+#define H5_DLL
+#define H5_HLDLL
+#define H5_HLCPPDLL
+#define HDF5_HL_F90CSTUBDLL
+#define H5_DLLVAR extern
+#define H5_DLLCPP
+#define H5TEST_DLL
+#define H5TEST_DLLVAR extern
+#define H5TOOLS_DLL
+#define H5TOOLS_DLLVAR extern
+#define H5_FCDLL
+#define H5_FCDLLVAR extern
+#define H5_FCTESTDLL
+#define H5_FCTESTDLLVAR extern
+#endif /*H5_HAVE_WIN32_API*/
+
+#endif /* H5API_ADPT_H */
+
+#endif /*  */
diff --git a/privatemodules/nc4/include/H5overflow.h b/privatemodules/nc4/include/H5overflow.h
new file mode 100644
index 0000000000000000000000000000000000000000..f4064f439639654a7c97934da129e07d09eaf8cb
--- /dev/null
+++ b/privatemodules/nc4/include/H5overflow.h
@@ -0,0 +1,1939 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/* Generated automatically by bin/make_overflow -- do not edit */
+/* Add new types to H5overflow.txt file */
+
+
+#ifndef _H5overflow_H
+#define _H5overflow_H
+
+
+/* Each type in this file is tested for assignment to the other types,
+ *      and range checks are defined for bad assignments at run-time.
+ */
+
+/* Assignment checks for unsigned */
+
+/* src: unsigned, dst: int */
+#if H5_SIZEOF_UNSIGNED < H5_SIZEOF_INT
+    #define ASSIGN_unsigned_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UNSIGNED > H5_SIZEOF_INT
+    #define ASSIGN_unsigned_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UNSIGNED == H5_SIZEOF_INT */
+    #define ASSIGN_unsigned_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: unsigned dst: int */
+
+/* src: unsigned, dst: uint8_t */
+#if H5_SIZEOF_UNSIGNED < H5_SIZEOF_UINT8_T
+    #define ASSIGN_unsigned_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UNSIGNED > H5_SIZEOF_UINT8_T
+    #define ASSIGN_unsigned_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UNSIGNED == H5_SIZEOF_UINT8_T */
+    #define ASSIGN_unsigned_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: unsigned dst: uint8_t */
+
+/* src: unsigned, dst: uint16_t */
+#if H5_SIZEOF_UNSIGNED < H5_SIZEOF_UINT16_T
+    #define ASSIGN_unsigned_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UNSIGNED > H5_SIZEOF_UINT16_T
+    #define ASSIGN_unsigned_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UNSIGNED == H5_SIZEOF_UINT16_T */
+    #define ASSIGN_unsigned_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: unsigned dst: uint16_t */
+
+/* src: unsigned, dst: uint32_t */
+#if H5_SIZEOF_UNSIGNED < H5_SIZEOF_UINT32_T
+    #define ASSIGN_unsigned_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UNSIGNED > H5_SIZEOF_UINT32_T
+    #define ASSIGN_unsigned_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UNSIGNED == H5_SIZEOF_UINT32_T */
+    #define ASSIGN_unsigned_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: unsigned dst: uint32_t */
+
+/* src: unsigned, dst: uint64_t */
+#if H5_SIZEOF_UNSIGNED < H5_SIZEOF_UINT64_T
+    #define ASSIGN_unsigned_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UNSIGNED > H5_SIZEOF_UINT64_T
+    #define ASSIGN_unsigned_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UNSIGNED == H5_SIZEOF_UINT64_T */
+    #define ASSIGN_unsigned_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: unsigned dst: uint64_t */
+
+/* src: unsigned, dst: ptrdiff_t */
+#if H5_SIZEOF_UNSIGNED < H5_SIZEOF_PTRDIFF_T
+    #define ASSIGN_unsigned_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UNSIGNED > H5_SIZEOF_PTRDIFF_T
+    #define ASSIGN_unsigned_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UNSIGNED == H5_SIZEOF_PTRDIFF_T */
+    #define ASSIGN_unsigned_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: unsigned dst: ptrdiff_t */
+
+/* src: unsigned, dst: size_t */
+#if H5_SIZEOF_UNSIGNED < H5_SIZEOF_SIZE_T
+    #define ASSIGN_unsigned_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UNSIGNED > H5_SIZEOF_SIZE_T
+    #define ASSIGN_unsigned_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UNSIGNED == H5_SIZEOF_SIZE_T */
+    #define ASSIGN_unsigned_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: unsigned dst: size_t */
+
+/* src: unsigned, dst: ssize_t */
+#if H5_SIZEOF_UNSIGNED < H5_SIZEOF_SSIZE_T
+    #define ASSIGN_unsigned_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UNSIGNED > H5_SIZEOF_SSIZE_T
+    #define ASSIGN_unsigned_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UNSIGNED == H5_SIZEOF_SSIZE_T */
+    #define ASSIGN_unsigned_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: unsigned dst: ssize_t */
+
+/* src: unsigned, dst: haddr_t */
+#if H5_SIZEOF_UNSIGNED < H5_SIZEOF_HADDR_T
+    #define ASSIGN_unsigned_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UNSIGNED > H5_SIZEOF_HADDR_T
+    #define ASSIGN_unsigned_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UNSIGNED == H5_SIZEOF_HADDR_T */
+    #define ASSIGN_unsigned_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: unsigned dst: haddr_t */
+
+/* src: unsigned, dst: hsize_t */
+#if H5_SIZEOF_UNSIGNED < H5_SIZEOF_HSIZE_T
+    #define ASSIGN_unsigned_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UNSIGNED > H5_SIZEOF_HSIZE_T
+    #define ASSIGN_unsigned_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UNSIGNED == H5_SIZEOF_HSIZE_T */
+    #define ASSIGN_unsigned_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: unsigned dst: hsize_t */
+
+/* src: unsigned, dst: hssize_t */
+#if H5_SIZEOF_UNSIGNED < H5_SIZEOF_HSSIZE_T
+    #define ASSIGN_unsigned_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UNSIGNED > H5_SIZEOF_HSSIZE_T
+    #define ASSIGN_unsigned_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UNSIGNED == H5_SIZEOF_HSSIZE_T */
+    #define ASSIGN_unsigned_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: unsigned dst: hssize_t */
+
+/* src: unsigned, dst: h5_stat_size_t */
+#if H5_SIZEOF_UNSIGNED < H5_SIZEOF_H5_STAT_SIZE_T
+    #define ASSIGN_unsigned_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UNSIGNED > H5_SIZEOF_H5_STAT_SIZE_T
+    #define ASSIGN_unsigned_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UNSIGNED == H5_SIZEOF_H5_STAT_SIZE_T */
+    #define ASSIGN_unsigned_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: unsigned dst: h5_stat_size_t */
+
+
+/* Assignment checks for int */
+
+/* src: int, dst: unsigned */
+#if H5_SIZEOF_INT < H5_SIZEOF_UNSIGNED
+    #define ASSIGN_int_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_INT > H5_SIZEOF_UNSIGNED
+    #define ASSIGN_int_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_INT == H5_SIZEOF_UNSIGNED */
+    #define ASSIGN_int_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: int dst: unsigned */
+
+/* src: int, dst: uint8_t */
+#if H5_SIZEOF_INT < H5_SIZEOF_UINT8_T
+    #define ASSIGN_int_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_INT > H5_SIZEOF_UINT8_T
+    #define ASSIGN_int_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_INT == H5_SIZEOF_UINT8_T */
+    #define ASSIGN_int_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: int dst: uint8_t */
+
+/* src: int, dst: uint16_t */
+#if H5_SIZEOF_INT < H5_SIZEOF_UINT16_T
+    #define ASSIGN_int_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_INT > H5_SIZEOF_UINT16_T
+    #define ASSIGN_int_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_INT == H5_SIZEOF_UINT16_T */
+    #define ASSIGN_int_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: int dst: uint16_t */
+
+/* src: int, dst: uint32_t */
+#if H5_SIZEOF_INT < H5_SIZEOF_UINT32_T
+    #define ASSIGN_int_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_INT > H5_SIZEOF_UINT32_T
+    #define ASSIGN_int_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_INT == H5_SIZEOF_UINT32_T */
+    #define ASSIGN_int_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: int dst: uint32_t */
+
+/* src: int, dst: uint64_t */
+#if H5_SIZEOF_INT < H5_SIZEOF_UINT64_T
+    #define ASSIGN_int_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_INT > H5_SIZEOF_UINT64_T
+    #define ASSIGN_int_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_INT == H5_SIZEOF_UINT64_T */
+    #define ASSIGN_int_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: int dst: uint64_t */
+
+/* src: int, dst: ptrdiff_t */
+#if H5_SIZEOF_INT < H5_SIZEOF_PTRDIFF_T
+    #define ASSIGN_int_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_INT > H5_SIZEOF_PTRDIFF_T
+    #define ASSIGN_int_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_INT == H5_SIZEOF_PTRDIFF_T */
+    #define ASSIGN_int_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: int dst: ptrdiff_t */
+
+/* src: int, dst: size_t */
+#if H5_SIZEOF_INT < H5_SIZEOF_SIZE_T
+    #define ASSIGN_int_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_INT > H5_SIZEOF_SIZE_T
+    #define ASSIGN_int_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_INT == H5_SIZEOF_SIZE_T */
+    #define ASSIGN_int_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: int dst: size_t */
+
+/* src: int, dst: ssize_t */
+#if H5_SIZEOF_INT < H5_SIZEOF_SSIZE_T
+    #define ASSIGN_int_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_INT > H5_SIZEOF_SSIZE_T
+    #define ASSIGN_int_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_INT == H5_SIZEOF_SSIZE_T */
+    #define ASSIGN_int_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: int dst: ssize_t */
+
+/* src: int, dst: haddr_t */
+#if H5_SIZEOF_INT < H5_SIZEOF_HADDR_T
+    #define ASSIGN_int_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_INT > H5_SIZEOF_HADDR_T
+    #define ASSIGN_int_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_INT == H5_SIZEOF_HADDR_T */
+    #define ASSIGN_int_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: int dst: haddr_t */
+
+/* src: int, dst: hsize_t */
+#if H5_SIZEOF_INT < H5_SIZEOF_HSIZE_T
+    #define ASSIGN_int_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_INT > H5_SIZEOF_HSIZE_T
+    #define ASSIGN_int_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_INT == H5_SIZEOF_HSIZE_T */
+    #define ASSIGN_int_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: int dst: hsize_t */
+
+/* src: int, dst: hssize_t */
+#if H5_SIZEOF_INT < H5_SIZEOF_HSSIZE_T
+    #define ASSIGN_int_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_INT > H5_SIZEOF_HSSIZE_T
+    #define ASSIGN_int_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_INT == H5_SIZEOF_HSSIZE_T */
+    #define ASSIGN_int_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: int dst: hssize_t */
+
+/* src: int, dst: h5_stat_size_t */
+#if H5_SIZEOF_INT < H5_SIZEOF_H5_STAT_SIZE_T
+    #define ASSIGN_int_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_INT > H5_SIZEOF_H5_STAT_SIZE_T
+    #define ASSIGN_int_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_INT == H5_SIZEOF_H5_STAT_SIZE_T */
+    #define ASSIGN_int_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: int dst: h5_stat_size_t */
+
+
+/* Assignment checks for uint8_t */
+
+/* src: uint8_t, dst: unsigned */
+#if H5_SIZEOF_UINT8_T < H5_SIZEOF_UNSIGNED
+    #define ASSIGN_uint8_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT8_T > H5_SIZEOF_UNSIGNED
+    #define ASSIGN_uint8_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT8_T == H5_SIZEOF_UNSIGNED */
+    #define ASSIGN_uint8_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint8_t dst: unsigned */
+
+/* src: uint8_t, dst: int */
+#if H5_SIZEOF_UINT8_T < H5_SIZEOF_INT
+    #define ASSIGN_uint8_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT8_T > H5_SIZEOF_INT
+    #define ASSIGN_uint8_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT8_T == H5_SIZEOF_INT */
+    #define ASSIGN_uint8_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint8_t dst: int */
+
+/* src: uint8_t, dst: uint16_t */
+#if H5_SIZEOF_UINT8_T < H5_SIZEOF_UINT16_T
+    #define ASSIGN_uint8_t_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT8_T > H5_SIZEOF_UINT16_T
+    #define ASSIGN_uint8_t_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT8_T == H5_SIZEOF_UINT16_T */
+    #define ASSIGN_uint8_t_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint8_t dst: uint16_t */
+
+/* src: uint8_t, dst: uint32_t */
+#if H5_SIZEOF_UINT8_T < H5_SIZEOF_UINT32_T
+    #define ASSIGN_uint8_t_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT8_T > H5_SIZEOF_UINT32_T
+    #define ASSIGN_uint8_t_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT8_T == H5_SIZEOF_UINT32_T */
+    #define ASSIGN_uint8_t_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint8_t dst: uint32_t */
+
+/* src: uint8_t, dst: uint64_t */
+#if H5_SIZEOF_UINT8_T < H5_SIZEOF_UINT64_T
+    #define ASSIGN_uint8_t_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT8_T > H5_SIZEOF_UINT64_T
+    #define ASSIGN_uint8_t_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT8_T == H5_SIZEOF_UINT64_T */
+    #define ASSIGN_uint8_t_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint8_t dst: uint64_t */
+
+/* src: uint8_t, dst: ptrdiff_t */
+#if H5_SIZEOF_UINT8_T < H5_SIZEOF_PTRDIFF_T
+    #define ASSIGN_uint8_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT8_T > H5_SIZEOF_PTRDIFF_T
+    #define ASSIGN_uint8_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT8_T == H5_SIZEOF_PTRDIFF_T */
+    #define ASSIGN_uint8_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint8_t dst: ptrdiff_t */
+
+/* src: uint8_t, dst: size_t */
+#if H5_SIZEOF_UINT8_T < H5_SIZEOF_SIZE_T
+    #define ASSIGN_uint8_t_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT8_T > H5_SIZEOF_SIZE_T
+    #define ASSIGN_uint8_t_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT8_T == H5_SIZEOF_SIZE_T */
+    #define ASSIGN_uint8_t_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint8_t dst: size_t */
+
+/* src: uint8_t, dst: ssize_t */
+#if H5_SIZEOF_UINT8_T < H5_SIZEOF_SSIZE_T
+    #define ASSIGN_uint8_t_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT8_T > H5_SIZEOF_SSIZE_T
+    #define ASSIGN_uint8_t_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT8_T == H5_SIZEOF_SSIZE_T */
+    #define ASSIGN_uint8_t_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint8_t dst: ssize_t */
+
+/* src: uint8_t, dst: haddr_t */
+#if H5_SIZEOF_UINT8_T < H5_SIZEOF_HADDR_T
+    #define ASSIGN_uint8_t_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT8_T > H5_SIZEOF_HADDR_T
+    #define ASSIGN_uint8_t_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT8_T == H5_SIZEOF_HADDR_T */
+    #define ASSIGN_uint8_t_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint8_t dst: haddr_t */
+
+/* src: uint8_t, dst: hsize_t */
+#if H5_SIZEOF_UINT8_T < H5_SIZEOF_HSIZE_T
+    #define ASSIGN_uint8_t_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT8_T > H5_SIZEOF_HSIZE_T
+    #define ASSIGN_uint8_t_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT8_T == H5_SIZEOF_HSIZE_T */
+    #define ASSIGN_uint8_t_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint8_t dst: hsize_t */
+
+/* src: uint8_t, dst: hssize_t */
+#if H5_SIZEOF_UINT8_T < H5_SIZEOF_HSSIZE_T
+    #define ASSIGN_uint8_t_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT8_T > H5_SIZEOF_HSSIZE_T
+    #define ASSIGN_uint8_t_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT8_T == H5_SIZEOF_HSSIZE_T */
+    #define ASSIGN_uint8_t_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint8_t dst: hssize_t */
+
+/* src: uint8_t, dst: h5_stat_size_t */
+#if H5_SIZEOF_UINT8_T < H5_SIZEOF_H5_STAT_SIZE_T
+    #define ASSIGN_uint8_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT8_T > H5_SIZEOF_H5_STAT_SIZE_T
+    #define ASSIGN_uint8_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT8_T == H5_SIZEOF_H5_STAT_SIZE_T */
+    #define ASSIGN_uint8_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint8_t dst: h5_stat_size_t */
+
+
+/* Assignment checks for uint16_t */
+
+/* src: uint16_t, dst: unsigned */
+#if H5_SIZEOF_UINT16_T < H5_SIZEOF_UNSIGNED
+    #define ASSIGN_uint16_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT16_T > H5_SIZEOF_UNSIGNED
+    #define ASSIGN_uint16_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT16_T == H5_SIZEOF_UNSIGNED */
+    #define ASSIGN_uint16_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint16_t dst: unsigned */
+
+/* src: uint16_t, dst: int */
+#if H5_SIZEOF_UINT16_T < H5_SIZEOF_INT
+    #define ASSIGN_uint16_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT16_T > H5_SIZEOF_INT
+    #define ASSIGN_uint16_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT16_T == H5_SIZEOF_INT */
+    #define ASSIGN_uint16_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint16_t dst: int */
+
+/* src: uint16_t, dst: uint8_t */
+#if H5_SIZEOF_UINT16_T < H5_SIZEOF_UINT8_T
+    #define ASSIGN_uint16_t_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT16_T > H5_SIZEOF_UINT8_T
+    #define ASSIGN_uint16_t_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT16_T == H5_SIZEOF_UINT8_T */
+    #define ASSIGN_uint16_t_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint16_t dst: uint8_t */
+
+/* src: uint16_t, dst: uint32_t */
+#if H5_SIZEOF_UINT16_T < H5_SIZEOF_UINT32_T
+    #define ASSIGN_uint16_t_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT16_T > H5_SIZEOF_UINT32_T
+    #define ASSIGN_uint16_t_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT16_T == H5_SIZEOF_UINT32_T */
+    #define ASSIGN_uint16_t_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint16_t dst: uint32_t */
+
+/* src: uint16_t, dst: uint64_t */
+#if H5_SIZEOF_UINT16_T < H5_SIZEOF_UINT64_T
+    #define ASSIGN_uint16_t_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT16_T > H5_SIZEOF_UINT64_T
+    #define ASSIGN_uint16_t_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT16_T == H5_SIZEOF_UINT64_T */
+    #define ASSIGN_uint16_t_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint16_t dst: uint64_t */
+
+/* src: uint16_t, dst: ptrdiff_t */
+#if H5_SIZEOF_UINT16_T < H5_SIZEOF_PTRDIFF_T
+    #define ASSIGN_uint16_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT16_T > H5_SIZEOF_PTRDIFF_T
+    #define ASSIGN_uint16_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT16_T == H5_SIZEOF_PTRDIFF_T */
+    #define ASSIGN_uint16_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint16_t dst: ptrdiff_t */
+
+/* src: uint16_t, dst: size_t */
+#if H5_SIZEOF_UINT16_T < H5_SIZEOF_SIZE_T
+    #define ASSIGN_uint16_t_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT16_T > H5_SIZEOF_SIZE_T
+    #define ASSIGN_uint16_t_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT16_T == H5_SIZEOF_SIZE_T */
+    #define ASSIGN_uint16_t_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint16_t dst: size_t */
+
+/* src: uint16_t, dst: ssize_t */
+#if H5_SIZEOF_UINT16_T < H5_SIZEOF_SSIZE_T
+    #define ASSIGN_uint16_t_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT16_T > H5_SIZEOF_SSIZE_T
+    #define ASSIGN_uint16_t_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT16_T == H5_SIZEOF_SSIZE_T */
+    #define ASSIGN_uint16_t_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint16_t dst: ssize_t */
+
+/* src: uint16_t, dst: haddr_t */
+#if H5_SIZEOF_UINT16_T < H5_SIZEOF_HADDR_T
+    #define ASSIGN_uint16_t_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT16_T > H5_SIZEOF_HADDR_T
+    #define ASSIGN_uint16_t_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT16_T == H5_SIZEOF_HADDR_T */
+    #define ASSIGN_uint16_t_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint16_t dst: haddr_t */
+
+/* src: uint16_t, dst: hsize_t */
+#if H5_SIZEOF_UINT16_T < H5_SIZEOF_HSIZE_T
+    #define ASSIGN_uint16_t_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT16_T > H5_SIZEOF_HSIZE_T
+    #define ASSIGN_uint16_t_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT16_T == H5_SIZEOF_HSIZE_T */
+    #define ASSIGN_uint16_t_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint16_t dst: hsize_t */
+
+/* src: uint16_t, dst: hssize_t */
+#if H5_SIZEOF_UINT16_T < H5_SIZEOF_HSSIZE_T
+    #define ASSIGN_uint16_t_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT16_T > H5_SIZEOF_HSSIZE_T
+    #define ASSIGN_uint16_t_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT16_T == H5_SIZEOF_HSSIZE_T */
+    #define ASSIGN_uint16_t_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint16_t dst: hssize_t */
+
+/* src: uint16_t, dst: h5_stat_size_t */
+#if H5_SIZEOF_UINT16_T < H5_SIZEOF_H5_STAT_SIZE_T
+    #define ASSIGN_uint16_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT16_T > H5_SIZEOF_H5_STAT_SIZE_T
+    #define ASSIGN_uint16_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT16_T == H5_SIZEOF_H5_STAT_SIZE_T */
+    #define ASSIGN_uint16_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint16_t dst: h5_stat_size_t */
+
+
+/* Assignment checks for uint32_t */
+
+/* src: uint32_t, dst: unsigned */
+#if H5_SIZEOF_UINT32_T < H5_SIZEOF_UNSIGNED
+    #define ASSIGN_uint32_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT32_T > H5_SIZEOF_UNSIGNED
+    #define ASSIGN_uint32_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT32_T == H5_SIZEOF_UNSIGNED */
+    #define ASSIGN_uint32_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint32_t dst: unsigned */
+
+/* src: uint32_t, dst: int */
+#if H5_SIZEOF_UINT32_T < H5_SIZEOF_INT
+    #define ASSIGN_uint32_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT32_T > H5_SIZEOF_INT
+    #define ASSIGN_uint32_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT32_T == H5_SIZEOF_INT */
+    #define ASSIGN_uint32_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint32_t dst: int */
+
+/* src: uint32_t, dst: uint8_t */
+#if H5_SIZEOF_UINT32_T < H5_SIZEOF_UINT8_T
+    #define ASSIGN_uint32_t_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT32_T > H5_SIZEOF_UINT8_T
+    #define ASSIGN_uint32_t_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT32_T == H5_SIZEOF_UINT8_T */
+    #define ASSIGN_uint32_t_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint32_t dst: uint8_t */
+
+/* src: uint32_t, dst: uint16_t */
+#if H5_SIZEOF_UINT32_T < H5_SIZEOF_UINT16_T
+    #define ASSIGN_uint32_t_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT32_T > H5_SIZEOF_UINT16_T
+    #define ASSIGN_uint32_t_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT32_T == H5_SIZEOF_UINT16_T */
+    #define ASSIGN_uint32_t_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint32_t dst: uint16_t */
+
+/* src: uint32_t, dst: uint64_t */
+#if H5_SIZEOF_UINT32_T < H5_SIZEOF_UINT64_T
+    #define ASSIGN_uint32_t_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT32_T > H5_SIZEOF_UINT64_T
+    #define ASSIGN_uint32_t_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT32_T == H5_SIZEOF_UINT64_T */
+    #define ASSIGN_uint32_t_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint32_t dst: uint64_t */
+
+/* src: uint32_t, dst: ptrdiff_t */
+#if H5_SIZEOF_UINT32_T < H5_SIZEOF_PTRDIFF_T
+    #define ASSIGN_uint32_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT32_T > H5_SIZEOF_PTRDIFF_T
+    #define ASSIGN_uint32_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT32_T == H5_SIZEOF_PTRDIFF_T */
+    #define ASSIGN_uint32_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint32_t dst: ptrdiff_t */
+
+/* src: uint32_t, dst: size_t */
+#if H5_SIZEOF_UINT32_T < H5_SIZEOF_SIZE_T
+    #define ASSIGN_uint32_t_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT32_T > H5_SIZEOF_SIZE_T
+    #define ASSIGN_uint32_t_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT32_T == H5_SIZEOF_SIZE_T */
+    #define ASSIGN_uint32_t_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint32_t dst: size_t */
+
+/* src: uint32_t, dst: ssize_t */
+#if H5_SIZEOF_UINT32_T < H5_SIZEOF_SSIZE_T
+    #define ASSIGN_uint32_t_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT32_T > H5_SIZEOF_SSIZE_T
+    #define ASSIGN_uint32_t_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT32_T == H5_SIZEOF_SSIZE_T */
+    #define ASSIGN_uint32_t_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint32_t dst: ssize_t */
+
+/* src: uint32_t, dst: haddr_t */
+#if H5_SIZEOF_UINT32_T < H5_SIZEOF_HADDR_T
+    #define ASSIGN_uint32_t_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT32_T > H5_SIZEOF_HADDR_T
+    #define ASSIGN_uint32_t_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT32_T == H5_SIZEOF_HADDR_T */
+    #define ASSIGN_uint32_t_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint32_t dst: haddr_t */
+
+/* src: uint32_t, dst: hsize_t */
+#if H5_SIZEOF_UINT32_T < H5_SIZEOF_HSIZE_T
+    #define ASSIGN_uint32_t_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT32_T > H5_SIZEOF_HSIZE_T
+    #define ASSIGN_uint32_t_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT32_T == H5_SIZEOF_HSIZE_T */
+    #define ASSIGN_uint32_t_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint32_t dst: hsize_t */
+
+/* src: uint32_t, dst: hssize_t */
+#if H5_SIZEOF_UINT32_T < H5_SIZEOF_HSSIZE_T
+    #define ASSIGN_uint32_t_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT32_T > H5_SIZEOF_HSSIZE_T
+    #define ASSIGN_uint32_t_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT32_T == H5_SIZEOF_HSSIZE_T */
+    #define ASSIGN_uint32_t_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint32_t dst: hssize_t */
+
+/* src: uint32_t, dst: h5_stat_size_t */
+#if H5_SIZEOF_UINT32_T < H5_SIZEOF_H5_STAT_SIZE_T
+    #define ASSIGN_uint32_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT32_T > H5_SIZEOF_H5_STAT_SIZE_T
+    #define ASSIGN_uint32_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT32_T == H5_SIZEOF_H5_STAT_SIZE_T */
+    #define ASSIGN_uint32_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint32_t dst: h5_stat_size_t */
+
+
+/* Assignment checks for uint64_t */
+
+/* src: uint64_t, dst: unsigned */
+#if H5_SIZEOF_UINT64_T < H5_SIZEOF_UNSIGNED
+    #define ASSIGN_uint64_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT64_T > H5_SIZEOF_UNSIGNED
+    #define ASSIGN_uint64_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT64_T == H5_SIZEOF_UNSIGNED */
+    #define ASSIGN_uint64_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint64_t dst: unsigned */
+
+/* src: uint64_t, dst: int */
+#if H5_SIZEOF_UINT64_T < H5_SIZEOF_INT
+    #define ASSIGN_uint64_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT64_T > H5_SIZEOF_INT
+    #define ASSIGN_uint64_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT64_T == H5_SIZEOF_INT */
+    #define ASSIGN_uint64_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint64_t dst: int */
+
+/* src: uint64_t, dst: uint8_t */
+#if H5_SIZEOF_UINT64_T < H5_SIZEOF_UINT8_T
+    #define ASSIGN_uint64_t_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT64_T > H5_SIZEOF_UINT8_T
+    #define ASSIGN_uint64_t_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT64_T == H5_SIZEOF_UINT8_T */
+    #define ASSIGN_uint64_t_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint64_t dst: uint8_t */
+
+/* src: uint64_t, dst: uint16_t */
+#if H5_SIZEOF_UINT64_T < H5_SIZEOF_UINT16_T
+    #define ASSIGN_uint64_t_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT64_T > H5_SIZEOF_UINT16_T
+    #define ASSIGN_uint64_t_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT64_T == H5_SIZEOF_UINT16_T */
+    #define ASSIGN_uint64_t_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint64_t dst: uint16_t */
+
+/* src: uint64_t, dst: uint32_t */
+#if H5_SIZEOF_UINT64_T < H5_SIZEOF_UINT32_T
+    #define ASSIGN_uint64_t_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT64_T > H5_SIZEOF_UINT32_T
+    #define ASSIGN_uint64_t_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT64_T == H5_SIZEOF_UINT32_T */
+    #define ASSIGN_uint64_t_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint64_t dst: uint32_t */
+
+/* src: uint64_t, dst: ptrdiff_t */
+#if H5_SIZEOF_UINT64_T < H5_SIZEOF_PTRDIFF_T
+    #define ASSIGN_uint64_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT64_T > H5_SIZEOF_PTRDIFF_T
+    #define ASSIGN_uint64_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT64_T == H5_SIZEOF_PTRDIFF_T */
+    #define ASSIGN_uint64_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint64_t dst: ptrdiff_t */
+
+/* src: uint64_t, dst: size_t */
+#if H5_SIZEOF_UINT64_T < H5_SIZEOF_SIZE_T
+    #define ASSIGN_uint64_t_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT64_T > H5_SIZEOF_SIZE_T
+    #define ASSIGN_uint64_t_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT64_T == H5_SIZEOF_SIZE_T */
+    #define ASSIGN_uint64_t_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint64_t dst: size_t */
+
+/* src: uint64_t, dst: ssize_t */
+#if H5_SIZEOF_UINT64_T < H5_SIZEOF_SSIZE_T
+    #define ASSIGN_uint64_t_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT64_T > H5_SIZEOF_SSIZE_T
+    #define ASSIGN_uint64_t_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT64_T == H5_SIZEOF_SSIZE_T */
+    #define ASSIGN_uint64_t_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint64_t dst: ssize_t */
+
+/* src: uint64_t, dst: haddr_t */
+#if H5_SIZEOF_UINT64_T < H5_SIZEOF_HADDR_T
+    #define ASSIGN_uint64_t_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT64_T > H5_SIZEOF_HADDR_T
+    #define ASSIGN_uint64_t_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT64_T == H5_SIZEOF_HADDR_T */
+    #define ASSIGN_uint64_t_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint64_t dst: haddr_t */
+
+/* src: uint64_t, dst: hsize_t */
+#if H5_SIZEOF_UINT64_T < H5_SIZEOF_HSIZE_T
+    #define ASSIGN_uint64_t_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT64_T > H5_SIZEOF_HSIZE_T
+    #define ASSIGN_uint64_t_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT64_T == H5_SIZEOF_HSIZE_T */
+    #define ASSIGN_uint64_t_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint64_t dst: hsize_t */
+
+/* src: uint64_t, dst: hssize_t */
+#if H5_SIZEOF_UINT64_T < H5_SIZEOF_HSSIZE_T
+    #define ASSIGN_uint64_t_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT64_T > H5_SIZEOF_HSSIZE_T
+    #define ASSIGN_uint64_t_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT64_T == H5_SIZEOF_HSSIZE_T */
+    #define ASSIGN_uint64_t_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint64_t dst: hssize_t */
+
+/* src: uint64_t, dst: h5_stat_size_t */
+#if H5_SIZEOF_UINT64_T < H5_SIZEOF_H5_STAT_SIZE_T
+    #define ASSIGN_uint64_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_UINT64_T > H5_SIZEOF_H5_STAT_SIZE_T
+    #define ASSIGN_uint64_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_UINT64_T == H5_SIZEOF_H5_STAT_SIZE_T */
+    #define ASSIGN_uint64_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: uint64_t dst: h5_stat_size_t */
+
+
+/* Assignment checks for ptrdiff_t */
+
+/* src: ptrdiff_t, dst: unsigned */
+#if H5_SIZEOF_PTRDIFF_T < H5_SIZEOF_UNSIGNED
+    #define ASSIGN_ptrdiff_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_PTRDIFF_T > H5_SIZEOF_UNSIGNED
+    #define ASSIGN_ptrdiff_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_PTRDIFF_T == H5_SIZEOF_UNSIGNED */
+    #define ASSIGN_ptrdiff_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: ptrdiff_t dst: unsigned */
+
+/* src: ptrdiff_t, dst: int */
+#if H5_SIZEOF_PTRDIFF_T < H5_SIZEOF_INT
+    #define ASSIGN_ptrdiff_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_PTRDIFF_T > H5_SIZEOF_INT
+    #define ASSIGN_ptrdiff_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_PTRDIFF_T == H5_SIZEOF_INT */
+    #define ASSIGN_ptrdiff_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: ptrdiff_t dst: int */
+
+/* src: ptrdiff_t, dst: uint8_t */
+#if H5_SIZEOF_PTRDIFF_T < H5_SIZEOF_UINT8_T
+    #define ASSIGN_ptrdiff_t_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_PTRDIFF_T > H5_SIZEOF_UINT8_T
+    #define ASSIGN_ptrdiff_t_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_PTRDIFF_T == H5_SIZEOF_UINT8_T */
+    #define ASSIGN_ptrdiff_t_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: ptrdiff_t dst: uint8_t */
+
+/* src: ptrdiff_t, dst: uint16_t */
+#if H5_SIZEOF_PTRDIFF_T < H5_SIZEOF_UINT16_T
+    #define ASSIGN_ptrdiff_t_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_PTRDIFF_T > H5_SIZEOF_UINT16_T
+    #define ASSIGN_ptrdiff_t_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_PTRDIFF_T == H5_SIZEOF_UINT16_T */
+    #define ASSIGN_ptrdiff_t_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: ptrdiff_t dst: uint16_t */
+
+/* src: ptrdiff_t, dst: uint32_t */
+#if H5_SIZEOF_PTRDIFF_T < H5_SIZEOF_UINT32_T
+    #define ASSIGN_ptrdiff_t_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_PTRDIFF_T > H5_SIZEOF_UINT32_T
+    #define ASSIGN_ptrdiff_t_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_PTRDIFF_T == H5_SIZEOF_UINT32_T */
+    #define ASSIGN_ptrdiff_t_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: ptrdiff_t dst: uint32_t */
+
+/* src: ptrdiff_t, dst: uint64_t */
+#if H5_SIZEOF_PTRDIFF_T < H5_SIZEOF_UINT64_T
+    #define ASSIGN_ptrdiff_t_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_PTRDIFF_T > H5_SIZEOF_UINT64_T
+    #define ASSIGN_ptrdiff_t_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_PTRDIFF_T == H5_SIZEOF_UINT64_T */
+    #define ASSIGN_ptrdiff_t_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: ptrdiff_t dst: uint64_t */
+
+/* src: ptrdiff_t, dst: size_t */
+#if H5_SIZEOF_PTRDIFF_T < H5_SIZEOF_SIZE_T
+    #define ASSIGN_ptrdiff_t_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_PTRDIFF_T > H5_SIZEOF_SIZE_T
+    #define ASSIGN_ptrdiff_t_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_PTRDIFF_T == H5_SIZEOF_SIZE_T */
+    #define ASSIGN_ptrdiff_t_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: ptrdiff_t dst: size_t */
+
+/* src: ptrdiff_t, dst: ssize_t */
+#if H5_SIZEOF_PTRDIFF_T < H5_SIZEOF_SSIZE_T
+    #define ASSIGN_ptrdiff_t_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_PTRDIFF_T > H5_SIZEOF_SSIZE_T
+    #define ASSIGN_ptrdiff_t_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_PTRDIFF_T == H5_SIZEOF_SSIZE_T */
+    #define ASSIGN_ptrdiff_t_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: ptrdiff_t dst: ssize_t */
+
+/* src: ptrdiff_t, dst: haddr_t */
+#if H5_SIZEOF_PTRDIFF_T < H5_SIZEOF_HADDR_T
+    #define ASSIGN_ptrdiff_t_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_PTRDIFF_T > H5_SIZEOF_HADDR_T
+    #define ASSIGN_ptrdiff_t_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_PTRDIFF_T == H5_SIZEOF_HADDR_T */
+    #define ASSIGN_ptrdiff_t_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: ptrdiff_t dst: haddr_t */
+
+/* src: ptrdiff_t, dst: hsize_t */
+#if H5_SIZEOF_PTRDIFF_T < H5_SIZEOF_HSIZE_T
+    #define ASSIGN_ptrdiff_t_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_PTRDIFF_T > H5_SIZEOF_HSIZE_T
+    #define ASSIGN_ptrdiff_t_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_PTRDIFF_T == H5_SIZEOF_HSIZE_T */
+    #define ASSIGN_ptrdiff_t_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: ptrdiff_t dst: hsize_t */
+
+/* src: ptrdiff_t, dst: hssize_t */
+#if H5_SIZEOF_PTRDIFF_T < H5_SIZEOF_HSSIZE_T
+    #define ASSIGN_ptrdiff_t_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_PTRDIFF_T > H5_SIZEOF_HSSIZE_T
+    #define ASSIGN_ptrdiff_t_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_PTRDIFF_T == H5_SIZEOF_HSSIZE_T */
+    #define ASSIGN_ptrdiff_t_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: ptrdiff_t dst: hssize_t */
+
+/* src: ptrdiff_t, dst: h5_stat_size_t */
+#if H5_SIZEOF_PTRDIFF_T < H5_SIZEOF_H5_STAT_SIZE_T
+    #define ASSIGN_ptrdiff_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_PTRDIFF_T > H5_SIZEOF_H5_STAT_SIZE_T
+    #define ASSIGN_ptrdiff_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_PTRDIFF_T == H5_SIZEOF_H5_STAT_SIZE_T */
+    #define ASSIGN_ptrdiff_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: ptrdiff_t dst: h5_stat_size_t */
+
+
+/* Assignment checks for size_t */
+
+/* src: size_t, dst: unsigned */
+#if H5_SIZEOF_SIZE_T < H5_SIZEOF_UNSIGNED
+    #define ASSIGN_size_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_SIZE_T > H5_SIZEOF_UNSIGNED
+    #define ASSIGN_size_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_SIZE_T == H5_SIZEOF_UNSIGNED */
+    #define ASSIGN_size_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: size_t dst: unsigned */
+
+/* src: size_t, dst: int */
+#if H5_SIZEOF_SIZE_T < H5_SIZEOF_INT
+    #define ASSIGN_size_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_SIZE_T > H5_SIZEOF_INT
+    #define ASSIGN_size_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_SIZE_T == H5_SIZEOF_INT */
+    #define ASSIGN_size_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: size_t dst: int */
+
+/* src: size_t, dst: uint8_t */
+#if H5_SIZEOF_SIZE_T < H5_SIZEOF_UINT8_T
+    #define ASSIGN_size_t_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_SIZE_T > H5_SIZEOF_UINT8_T
+    #define ASSIGN_size_t_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_SIZE_T == H5_SIZEOF_UINT8_T */
+    #define ASSIGN_size_t_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: size_t dst: uint8_t */
+
+/* src: size_t, dst: uint16_t */
+#if H5_SIZEOF_SIZE_T < H5_SIZEOF_UINT16_T
+    #define ASSIGN_size_t_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_SIZE_T > H5_SIZEOF_UINT16_T
+    #define ASSIGN_size_t_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_SIZE_T == H5_SIZEOF_UINT16_T */
+    #define ASSIGN_size_t_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: size_t dst: uint16_t */
+
+/* src: size_t, dst: uint32_t */
+#if H5_SIZEOF_SIZE_T < H5_SIZEOF_UINT32_T
+    #define ASSIGN_size_t_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_SIZE_T > H5_SIZEOF_UINT32_T
+    #define ASSIGN_size_t_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_SIZE_T == H5_SIZEOF_UINT32_T */
+    #define ASSIGN_size_t_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: size_t dst: uint32_t */
+
+/* src: size_t, dst: uint64_t */
+#if H5_SIZEOF_SIZE_T < H5_SIZEOF_UINT64_T
+    #define ASSIGN_size_t_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_SIZE_T > H5_SIZEOF_UINT64_T
+    #define ASSIGN_size_t_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_SIZE_T == H5_SIZEOF_UINT64_T */
+    #define ASSIGN_size_t_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: size_t dst: uint64_t */
+
+/* src: size_t, dst: ptrdiff_t */
+#if H5_SIZEOF_SIZE_T < H5_SIZEOF_PTRDIFF_T
+    #define ASSIGN_size_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_SIZE_T > H5_SIZEOF_PTRDIFF_T
+    #define ASSIGN_size_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_SIZE_T == H5_SIZEOF_PTRDIFF_T */
+    #define ASSIGN_size_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: size_t dst: ptrdiff_t */
+
+/* src: size_t, dst: ssize_t */
+#if H5_SIZEOF_SIZE_T < H5_SIZEOF_SSIZE_T
+    #define ASSIGN_size_t_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_SIZE_T > H5_SIZEOF_SSIZE_T
+    #define ASSIGN_size_t_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_SIZE_T == H5_SIZEOF_SSIZE_T */
+    #define ASSIGN_size_t_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: size_t dst: ssize_t */
+
+/* src: size_t, dst: haddr_t */
+#if H5_SIZEOF_SIZE_T < H5_SIZEOF_HADDR_T
+    #define ASSIGN_size_t_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_SIZE_T > H5_SIZEOF_HADDR_T
+    #define ASSIGN_size_t_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_SIZE_T == H5_SIZEOF_HADDR_T */
+    #define ASSIGN_size_t_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: size_t dst: haddr_t */
+
+/* src: size_t, dst: hsize_t */
+#if H5_SIZEOF_SIZE_T < H5_SIZEOF_HSIZE_T
+    #define ASSIGN_size_t_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_SIZE_T > H5_SIZEOF_HSIZE_T
+    #define ASSIGN_size_t_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_SIZE_T == H5_SIZEOF_HSIZE_T */
+    #define ASSIGN_size_t_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: size_t dst: hsize_t */
+
+/* src: size_t, dst: hssize_t */
+#if H5_SIZEOF_SIZE_T < H5_SIZEOF_HSSIZE_T
+    #define ASSIGN_size_t_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_SIZE_T > H5_SIZEOF_HSSIZE_T
+    #define ASSIGN_size_t_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_SIZE_T == H5_SIZEOF_HSSIZE_T */
+    #define ASSIGN_size_t_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: size_t dst: hssize_t */
+
+/* src: size_t, dst: h5_stat_size_t */
+#if H5_SIZEOF_SIZE_T < H5_SIZEOF_H5_STAT_SIZE_T
+    #define ASSIGN_size_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_SIZE_T > H5_SIZEOF_H5_STAT_SIZE_T
+    #define ASSIGN_size_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_SIZE_T == H5_SIZEOF_H5_STAT_SIZE_T */
+    #define ASSIGN_size_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: size_t dst: h5_stat_size_t */
+
+
+/* Assignment checks for ssize_t */
+
+/* src: ssize_t, dst: unsigned */
+#if H5_SIZEOF_SSIZE_T < H5_SIZEOF_UNSIGNED
+    #define ASSIGN_ssize_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_SSIZE_T > H5_SIZEOF_UNSIGNED
+    #define ASSIGN_ssize_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_SSIZE_T == H5_SIZEOF_UNSIGNED */
+    #define ASSIGN_ssize_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: ssize_t dst: unsigned */
+
+/* src: ssize_t, dst: int */
+#if H5_SIZEOF_SSIZE_T < H5_SIZEOF_INT
+    #define ASSIGN_ssize_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_SSIZE_T > H5_SIZEOF_INT
+    #define ASSIGN_ssize_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_SSIZE_T == H5_SIZEOF_INT */
+    #define ASSIGN_ssize_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: ssize_t dst: int */
+
+/* src: ssize_t, dst: uint8_t */
+#if H5_SIZEOF_SSIZE_T < H5_SIZEOF_UINT8_T
+    #define ASSIGN_ssize_t_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_SSIZE_T > H5_SIZEOF_UINT8_T
+    #define ASSIGN_ssize_t_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_SSIZE_T == H5_SIZEOF_UINT8_T */
+    #define ASSIGN_ssize_t_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: ssize_t dst: uint8_t */
+
+/* src: ssize_t, dst: uint16_t */
+#if H5_SIZEOF_SSIZE_T < H5_SIZEOF_UINT16_T
+    #define ASSIGN_ssize_t_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_SSIZE_T > H5_SIZEOF_UINT16_T
+    #define ASSIGN_ssize_t_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_SSIZE_T == H5_SIZEOF_UINT16_T */
+    #define ASSIGN_ssize_t_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: ssize_t dst: uint16_t */
+
+/* src: ssize_t, dst: uint32_t */
+#if H5_SIZEOF_SSIZE_T < H5_SIZEOF_UINT32_T
+    #define ASSIGN_ssize_t_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_SSIZE_T > H5_SIZEOF_UINT32_T
+    #define ASSIGN_ssize_t_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_SSIZE_T == H5_SIZEOF_UINT32_T */
+    #define ASSIGN_ssize_t_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: ssize_t dst: uint32_t */
+
+/* src: ssize_t, dst: uint64_t */
+#if H5_SIZEOF_SSIZE_T < H5_SIZEOF_UINT64_T
+    #define ASSIGN_ssize_t_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_SSIZE_T > H5_SIZEOF_UINT64_T
+    #define ASSIGN_ssize_t_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_SSIZE_T == H5_SIZEOF_UINT64_T */
+    #define ASSIGN_ssize_t_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: ssize_t dst: uint64_t */
+
+/* src: ssize_t, dst: ptrdiff_t */
+#if H5_SIZEOF_SSIZE_T < H5_SIZEOF_PTRDIFF_T
+    #define ASSIGN_ssize_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_SSIZE_T > H5_SIZEOF_PTRDIFF_T
+    #define ASSIGN_ssize_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_SSIZE_T == H5_SIZEOF_PTRDIFF_T */
+    #define ASSIGN_ssize_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: ssize_t dst: ptrdiff_t */
+
+/* src: ssize_t, dst: size_t */
+#if H5_SIZEOF_SSIZE_T < H5_SIZEOF_SIZE_T
+    #define ASSIGN_ssize_t_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_SSIZE_T > H5_SIZEOF_SIZE_T
+    #define ASSIGN_ssize_t_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_SSIZE_T == H5_SIZEOF_SIZE_T */
+    #define ASSIGN_ssize_t_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: ssize_t dst: size_t */
+
+/* src: ssize_t, dst: haddr_t */
+#if H5_SIZEOF_SSIZE_T < H5_SIZEOF_HADDR_T
+    #define ASSIGN_ssize_t_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_SSIZE_T > H5_SIZEOF_HADDR_T
+    #define ASSIGN_ssize_t_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_SSIZE_T == H5_SIZEOF_HADDR_T */
+    #define ASSIGN_ssize_t_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: ssize_t dst: haddr_t */
+
+/* src: ssize_t, dst: hsize_t */
+#if H5_SIZEOF_SSIZE_T < H5_SIZEOF_HSIZE_T
+    #define ASSIGN_ssize_t_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_SSIZE_T > H5_SIZEOF_HSIZE_T
+    #define ASSIGN_ssize_t_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_SSIZE_T == H5_SIZEOF_HSIZE_T */
+    #define ASSIGN_ssize_t_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: ssize_t dst: hsize_t */
+
+/* src: ssize_t, dst: hssize_t */
+#if H5_SIZEOF_SSIZE_T < H5_SIZEOF_HSSIZE_T
+    #define ASSIGN_ssize_t_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_SSIZE_T > H5_SIZEOF_HSSIZE_T
+    #define ASSIGN_ssize_t_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_SSIZE_T == H5_SIZEOF_HSSIZE_T */
+    #define ASSIGN_ssize_t_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: ssize_t dst: hssize_t */
+
+/* src: ssize_t, dst: h5_stat_size_t */
+#if H5_SIZEOF_SSIZE_T < H5_SIZEOF_H5_STAT_SIZE_T
+    #define ASSIGN_ssize_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_SSIZE_T > H5_SIZEOF_H5_STAT_SIZE_T
+    #define ASSIGN_ssize_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_SSIZE_T == H5_SIZEOF_H5_STAT_SIZE_T */
+    #define ASSIGN_ssize_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: ssize_t dst: h5_stat_size_t */
+
+
+/* Assignment checks for haddr_t */
+
+/* src: haddr_t, dst: unsigned */
+#if H5_SIZEOF_HADDR_T < H5_SIZEOF_UNSIGNED
+    #define ASSIGN_haddr_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HADDR_T > H5_SIZEOF_UNSIGNED
+    #define ASSIGN_haddr_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HADDR_T == H5_SIZEOF_UNSIGNED */
+    #define ASSIGN_haddr_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: haddr_t dst: unsigned */
+
+/* src: haddr_t, dst: int */
+#if H5_SIZEOF_HADDR_T < H5_SIZEOF_INT
+    #define ASSIGN_haddr_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HADDR_T > H5_SIZEOF_INT
+    #define ASSIGN_haddr_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HADDR_T == H5_SIZEOF_INT */
+    #define ASSIGN_haddr_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: haddr_t dst: int */
+
+/* src: haddr_t, dst: uint8_t */
+#if H5_SIZEOF_HADDR_T < H5_SIZEOF_UINT8_T
+    #define ASSIGN_haddr_t_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HADDR_T > H5_SIZEOF_UINT8_T
+    #define ASSIGN_haddr_t_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HADDR_T == H5_SIZEOF_UINT8_T */
+    #define ASSIGN_haddr_t_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: haddr_t dst: uint8_t */
+
+/* src: haddr_t, dst: uint16_t */
+#if H5_SIZEOF_HADDR_T < H5_SIZEOF_UINT16_T
+    #define ASSIGN_haddr_t_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HADDR_T > H5_SIZEOF_UINT16_T
+    #define ASSIGN_haddr_t_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HADDR_T == H5_SIZEOF_UINT16_T */
+    #define ASSIGN_haddr_t_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: haddr_t dst: uint16_t */
+
+/* src: haddr_t, dst: uint32_t */
+#if H5_SIZEOF_HADDR_T < H5_SIZEOF_UINT32_T
+    #define ASSIGN_haddr_t_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HADDR_T > H5_SIZEOF_UINT32_T
+    #define ASSIGN_haddr_t_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HADDR_T == H5_SIZEOF_UINT32_T */
+    #define ASSIGN_haddr_t_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: haddr_t dst: uint32_t */
+
+/* src: haddr_t, dst: uint64_t */
+#if H5_SIZEOF_HADDR_T < H5_SIZEOF_UINT64_T
+    #define ASSIGN_haddr_t_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HADDR_T > H5_SIZEOF_UINT64_T
+    #define ASSIGN_haddr_t_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HADDR_T == H5_SIZEOF_UINT64_T */
+    #define ASSIGN_haddr_t_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: haddr_t dst: uint64_t */
+
+/* src: haddr_t, dst: ptrdiff_t */
+#if H5_SIZEOF_HADDR_T < H5_SIZEOF_PTRDIFF_T
+    #define ASSIGN_haddr_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HADDR_T > H5_SIZEOF_PTRDIFF_T
+    #define ASSIGN_haddr_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HADDR_T == H5_SIZEOF_PTRDIFF_T */
+    #define ASSIGN_haddr_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: haddr_t dst: ptrdiff_t */
+
+/* src: haddr_t, dst: size_t */
+#if H5_SIZEOF_HADDR_T < H5_SIZEOF_SIZE_T
+    #define ASSIGN_haddr_t_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HADDR_T > H5_SIZEOF_SIZE_T
+    #define ASSIGN_haddr_t_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HADDR_T == H5_SIZEOF_SIZE_T */
+    #define ASSIGN_haddr_t_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: haddr_t dst: size_t */
+
+/* src: haddr_t, dst: ssize_t */
+#if H5_SIZEOF_HADDR_T < H5_SIZEOF_SSIZE_T
+    #define ASSIGN_haddr_t_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HADDR_T > H5_SIZEOF_SSIZE_T
+    #define ASSIGN_haddr_t_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HADDR_T == H5_SIZEOF_SSIZE_T */
+    #define ASSIGN_haddr_t_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: haddr_t dst: ssize_t */
+
+/* src: haddr_t, dst: hsize_t */
+#if H5_SIZEOF_HADDR_T < H5_SIZEOF_HSIZE_T
+    #define ASSIGN_haddr_t_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HADDR_T > H5_SIZEOF_HSIZE_T
+    #define ASSIGN_haddr_t_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HADDR_T == H5_SIZEOF_HSIZE_T */
+    #define ASSIGN_haddr_t_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: haddr_t dst: hsize_t */
+
+/* src: haddr_t, dst: hssize_t */
+#if H5_SIZEOF_HADDR_T < H5_SIZEOF_HSSIZE_T
+    #define ASSIGN_haddr_t_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HADDR_T > H5_SIZEOF_HSSIZE_T
+    #define ASSIGN_haddr_t_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HADDR_T == H5_SIZEOF_HSSIZE_T */
+    #define ASSIGN_haddr_t_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: haddr_t dst: hssize_t */
+
+/* src: haddr_t, dst: h5_stat_size_t */
+#if H5_SIZEOF_HADDR_T < H5_SIZEOF_H5_STAT_SIZE_T
+    #define ASSIGN_haddr_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HADDR_T > H5_SIZEOF_H5_STAT_SIZE_T
+    #define ASSIGN_haddr_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HADDR_T == H5_SIZEOF_H5_STAT_SIZE_T */
+    #define ASSIGN_haddr_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: haddr_t dst: h5_stat_size_t */
+
+
+/* Assignment checks for hsize_t */
+
+/* src: hsize_t, dst: unsigned */
+#if H5_SIZEOF_HSIZE_T < H5_SIZEOF_UNSIGNED
+    #define ASSIGN_hsize_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HSIZE_T > H5_SIZEOF_UNSIGNED
+    #define ASSIGN_hsize_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HSIZE_T == H5_SIZEOF_UNSIGNED */
+    #define ASSIGN_hsize_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: hsize_t dst: unsigned */
+
+/* src: hsize_t, dst: int */
+#if H5_SIZEOF_HSIZE_T < H5_SIZEOF_INT
+    #define ASSIGN_hsize_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HSIZE_T > H5_SIZEOF_INT
+    #define ASSIGN_hsize_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HSIZE_T == H5_SIZEOF_INT */
+    #define ASSIGN_hsize_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: hsize_t dst: int */
+
+/* src: hsize_t, dst: uint8_t */
+#if H5_SIZEOF_HSIZE_T < H5_SIZEOF_UINT8_T
+    #define ASSIGN_hsize_t_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HSIZE_T > H5_SIZEOF_UINT8_T
+    #define ASSIGN_hsize_t_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HSIZE_T == H5_SIZEOF_UINT8_T */
+    #define ASSIGN_hsize_t_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: hsize_t dst: uint8_t */
+
+/* src: hsize_t, dst: uint16_t */
+#if H5_SIZEOF_HSIZE_T < H5_SIZEOF_UINT16_T
+    #define ASSIGN_hsize_t_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HSIZE_T > H5_SIZEOF_UINT16_T
+    #define ASSIGN_hsize_t_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HSIZE_T == H5_SIZEOF_UINT16_T */
+    #define ASSIGN_hsize_t_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: hsize_t dst: uint16_t */
+
+/* src: hsize_t, dst: uint32_t */
+#if H5_SIZEOF_HSIZE_T < H5_SIZEOF_UINT32_T
+    #define ASSIGN_hsize_t_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HSIZE_T > H5_SIZEOF_UINT32_T
+    #define ASSIGN_hsize_t_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HSIZE_T == H5_SIZEOF_UINT32_T */
+    #define ASSIGN_hsize_t_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: hsize_t dst: uint32_t */
+
+/* src: hsize_t, dst: uint64_t */
+#if H5_SIZEOF_HSIZE_T < H5_SIZEOF_UINT64_T
+    #define ASSIGN_hsize_t_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HSIZE_T > H5_SIZEOF_UINT64_T
+    #define ASSIGN_hsize_t_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HSIZE_T == H5_SIZEOF_UINT64_T */
+    #define ASSIGN_hsize_t_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: hsize_t dst: uint64_t */
+
+/* src: hsize_t, dst: ptrdiff_t */
+#if H5_SIZEOF_HSIZE_T < H5_SIZEOF_PTRDIFF_T
+    #define ASSIGN_hsize_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HSIZE_T > H5_SIZEOF_PTRDIFF_T
+    #define ASSIGN_hsize_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HSIZE_T == H5_SIZEOF_PTRDIFF_T */
+    #define ASSIGN_hsize_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: hsize_t dst: ptrdiff_t */
+
+/* src: hsize_t, dst: size_t */
+#if H5_SIZEOF_HSIZE_T < H5_SIZEOF_SIZE_T
+    #define ASSIGN_hsize_t_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HSIZE_T > H5_SIZEOF_SIZE_T
+    #define ASSIGN_hsize_t_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HSIZE_T == H5_SIZEOF_SIZE_T */
+    #define ASSIGN_hsize_t_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: hsize_t dst: size_t */
+
+/* src: hsize_t, dst: ssize_t */
+#if H5_SIZEOF_HSIZE_T < H5_SIZEOF_SSIZE_T
+    #define ASSIGN_hsize_t_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HSIZE_T > H5_SIZEOF_SSIZE_T
+    #define ASSIGN_hsize_t_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HSIZE_T == H5_SIZEOF_SSIZE_T */
+    #define ASSIGN_hsize_t_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: hsize_t dst: ssize_t */
+
+/* src: hsize_t, dst: haddr_t */
+#if H5_SIZEOF_HSIZE_T < H5_SIZEOF_HADDR_T
+    #define ASSIGN_hsize_t_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HSIZE_T > H5_SIZEOF_HADDR_T
+    #define ASSIGN_hsize_t_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HSIZE_T == H5_SIZEOF_HADDR_T */
+    #define ASSIGN_hsize_t_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: hsize_t dst: haddr_t */
+
+/* src: hsize_t, dst: hssize_t */
+#if H5_SIZEOF_HSIZE_T < H5_SIZEOF_HSSIZE_T
+    #define ASSIGN_hsize_t_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HSIZE_T > H5_SIZEOF_HSSIZE_T
+    #define ASSIGN_hsize_t_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HSIZE_T == H5_SIZEOF_HSSIZE_T */
+    #define ASSIGN_hsize_t_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: hsize_t dst: hssize_t */
+
+/* src: hsize_t, dst: h5_stat_size_t */
+#if H5_SIZEOF_HSIZE_T < H5_SIZEOF_H5_STAT_SIZE_T
+    #define ASSIGN_hsize_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HSIZE_T > H5_SIZEOF_H5_STAT_SIZE_T
+    #define ASSIGN_hsize_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HSIZE_T == H5_SIZEOF_H5_STAT_SIZE_T */
+    #define ASSIGN_hsize_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: hsize_t dst: h5_stat_size_t */
+
+
+/* Assignment checks for hssize_t */
+
+/* src: hssize_t, dst: unsigned */
+#if H5_SIZEOF_HSSIZE_T < H5_SIZEOF_UNSIGNED
+    #define ASSIGN_hssize_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HSSIZE_T > H5_SIZEOF_UNSIGNED
+    #define ASSIGN_hssize_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HSSIZE_T == H5_SIZEOF_UNSIGNED */
+    #define ASSIGN_hssize_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: hssize_t dst: unsigned */
+
+/* src: hssize_t, dst: int */
+#if H5_SIZEOF_HSSIZE_T < H5_SIZEOF_INT
+    #define ASSIGN_hssize_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HSSIZE_T > H5_SIZEOF_INT
+    #define ASSIGN_hssize_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HSSIZE_T == H5_SIZEOF_INT */
+    #define ASSIGN_hssize_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: hssize_t dst: int */
+
+/* src: hssize_t, dst: uint8_t */
+#if H5_SIZEOF_HSSIZE_T < H5_SIZEOF_UINT8_T
+    #define ASSIGN_hssize_t_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HSSIZE_T > H5_SIZEOF_UINT8_T
+    #define ASSIGN_hssize_t_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HSSIZE_T == H5_SIZEOF_UINT8_T */
+    #define ASSIGN_hssize_t_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: hssize_t dst: uint8_t */
+
+/* src: hssize_t, dst: uint16_t */
+#if H5_SIZEOF_HSSIZE_T < H5_SIZEOF_UINT16_T
+    #define ASSIGN_hssize_t_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HSSIZE_T > H5_SIZEOF_UINT16_T
+    #define ASSIGN_hssize_t_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HSSIZE_T == H5_SIZEOF_UINT16_T */
+    #define ASSIGN_hssize_t_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: hssize_t dst: uint16_t */
+
+/* src: hssize_t, dst: uint32_t */
+#if H5_SIZEOF_HSSIZE_T < H5_SIZEOF_UINT32_T
+    #define ASSIGN_hssize_t_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HSSIZE_T > H5_SIZEOF_UINT32_T
+    #define ASSIGN_hssize_t_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HSSIZE_T == H5_SIZEOF_UINT32_T */
+    #define ASSIGN_hssize_t_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: hssize_t dst: uint32_t */
+
+/* src: hssize_t, dst: uint64_t */
+#if H5_SIZEOF_HSSIZE_T < H5_SIZEOF_UINT64_T
+    #define ASSIGN_hssize_t_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HSSIZE_T > H5_SIZEOF_UINT64_T
+    #define ASSIGN_hssize_t_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HSSIZE_T == H5_SIZEOF_UINT64_T */
+    #define ASSIGN_hssize_t_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: hssize_t dst: uint64_t */
+
+/* src: hssize_t, dst: ptrdiff_t */
+#if H5_SIZEOF_HSSIZE_T < H5_SIZEOF_PTRDIFF_T
+    #define ASSIGN_hssize_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HSSIZE_T > H5_SIZEOF_PTRDIFF_T
+    #define ASSIGN_hssize_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HSSIZE_T == H5_SIZEOF_PTRDIFF_T */
+    #define ASSIGN_hssize_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: hssize_t dst: ptrdiff_t */
+
+/* src: hssize_t, dst: size_t */
+#if H5_SIZEOF_HSSIZE_T < H5_SIZEOF_SIZE_T
+    #define ASSIGN_hssize_t_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HSSIZE_T > H5_SIZEOF_SIZE_T
+    #define ASSIGN_hssize_t_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HSSIZE_T == H5_SIZEOF_SIZE_T */
+    #define ASSIGN_hssize_t_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: hssize_t dst: size_t */
+
+/* src: hssize_t, dst: ssize_t */
+#if H5_SIZEOF_HSSIZE_T < H5_SIZEOF_SSIZE_T
+    #define ASSIGN_hssize_t_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HSSIZE_T > H5_SIZEOF_SSIZE_T
+    #define ASSIGN_hssize_t_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HSSIZE_T == H5_SIZEOF_SSIZE_T */
+    #define ASSIGN_hssize_t_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: hssize_t dst: ssize_t */
+
+/* src: hssize_t, dst: haddr_t */
+#if H5_SIZEOF_HSSIZE_T < H5_SIZEOF_HADDR_T
+    #define ASSIGN_hssize_t_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HSSIZE_T > H5_SIZEOF_HADDR_T
+    #define ASSIGN_hssize_t_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HSSIZE_T == H5_SIZEOF_HADDR_T */
+    #define ASSIGN_hssize_t_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: hssize_t dst: haddr_t */
+
+/* src: hssize_t, dst: hsize_t */
+#if H5_SIZEOF_HSSIZE_T < H5_SIZEOF_HSIZE_T
+    #define ASSIGN_hssize_t_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HSSIZE_T > H5_SIZEOF_HSIZE_T
+    #define ASSIGN_hssize_t_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HSSIZE_T == H5_SIZEOF_HSIZE_T */
+    #define ASSIGN_hssize_t_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: hssize_t dst: hsize_t */
+
+/* src: hssize_t, dst: h5_stat_size_t */
+#if H5_SIZEOF_HSSIZE_T < H5_SIZEOF_H5_STAT_SIZE_T
+    #define ASSIGN_hssize_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_HSSIZE_T > H5_SIZEOF_H5_STAT_SIZE_T
+    #define ASSIGN_hssize_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_HSSIZE_T == H5_SIZEOF_H5_STAT_SIZE_T */
+    #define ASSIGN_hssize_t_TO_h5_stat_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype)
+#endif /* src: hssize_t dst: h5_stat_size_t */
+
+
+/* Assignment checks for h5_stat_size_t */
+
+/* src: h5_stat_size_t, dst: unsigned */
+#if H5_SIZEOF_H5_STAT_SIZE_T < H5_SIZEOF_UNSIGNED
+    #define ASSIGN_h5_stat_size_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_H5_STAT_SIZE_T > H5_SIZEOF_UNSIGNED
+    #define ASSIGN_h5_stat_size_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_H5_STAT_SIZE_T == H5_SIZEOF_UNSIGNED */
+    #define ASSIGN_h5_stat_size_t_TO_unsigned(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: h5_stat_size_t dst: unsigned */
+
+/* src: h5_stat_size_t, dst: int */
+#if H5_SIZEOF_H5_STAT_SIZE_T < H5_SIZEOF_INT
+    #define ASSIGN_h5_stat_size_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_H5_STAT_SIZE_T > H5_SIZEOF_INT
+    #define ASSIGN_h5_stat_size_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_H5_STAT_SIZE_T == H5_SIZEOF_INT */
+    #define ASSIGN_h5_stat_size_t_TO_int(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: h5_stat_size_t dst: int */
+
+/* src: h5_stat_size_t, dst: uint8_t */
+#if H5_SIZEOF_H5_STAT_SIZE_T < H5_SIZEOF_UINT8_T
+    #define ASSIGN_h5_stat_size_t_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_H5_STAT_SIZE_T > H5_SIZEOF_UINT8_T
+    #define ASSIGN_h5_stat_size_t_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_H5_STAT_SIZE_T == H5_SIZEOF_UINT8_T */
+    #define ASSIGN_h5_stat_size_t_TO_uint8_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: h5_stat_size_t dst: uint8_t */
+
+/* src: h5_stat_size_t, dst: uint16_t */
+#if H5_SIZEOF_H5_STAT_SIZE_T < H5_SIZEOF_UINT16_T
+    #define ASSIGN_h5_stat_size_t_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_H5_STAT_SIZE_T > H5_SIZEOF_UINT16_T
+    #define ASSIGN_h5_stat_size_t_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_H5_STAT_SIZE_T == H5_SIZEOF_UINT16_T */
+    #define ASSIGN_h5_stat_size_t_TO_uint16_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: h5_stat_size_t dst: uint16_t */
+
+/* src: h5_stat_size_t, dst: uint32_t */
+#if H5_SIZEOF_H5_STAT_SIZE_T < H5_SIZEOF_UINT32_T
+    #define ASSIGN_h5_stat_size_t_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_H5_STAT_SIZE_T > H5_SIZEOF_UINT32_T
+    #define ASSIGN_h5_stat_size_t_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_H5_STAT_SIZE_T == H5_SIZEOF_UINT32_T */
+    #define ASSIGN_h5_stat_size_t_TO_uint32_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: h5_stat_size_t dst: uint32_t */
+
+/* src: h5_stat_size_t, dst: uint64_t */
+#if H5_SIZEOF_H5_STAT_SIZE_T < H5_SIZEOF_UINT64_T
+    #define ASSIGN_h5_stat_size_t_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_H5_STAT_SIZE_T > H5_SIZEOF_UINT64_T
+    #define ASSIGN_h5_stat_size_t_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_H5_STAT_SIZE_T == H5_SIZEOF_UINT64_T */
+    #define ASSIGN_h5_stat_size_t_TO_uint64_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: h5_stat_size_t dst: uint64_t */
+
+/* src: h5_stat_size_t, dst: ptrdiff_t */
+#if H5_SIZEOF_H5_STAT_SIZE_T < H5_SIZEOF_PTRDIFF_T
+    #define ASSIGN_h5_stat_size_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_H5_STAT_SIZE_T > H5_SIZEOF_PTRDIFF_T
+    #define ASSIGN_h5_stat_size_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_H5_STAT_SIZE_T == H5_SIZEOF_PTRDIFF_T */
+    #define ASSIGN_h5_stat_size_t_TO_ptrdiff_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: h5_stat_size_t dst: ptrdiff_t */
+
+/* src: h5_stat_size_t, dst: size_t */
+#if H5_SIZEOF_H5_STAT_SIZE_T < H5_SIZEOF_SIZE_T
+    #define ASSIGN_h5_stat_size_t_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_H5_STAT_SIZE_T > H5_SIZEOF_SIZE_T
+    #define ASSIGN_h5_stat_size_t_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_H5_STAT_SIZE_T == H5_SIZEOF_SIZE_T */
+    #define ASSIGN_h5_stat_size_t_TO_size_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: h5_stat_size_t dst: size_t */
+
+/* src: h5_stat_size_t, dst: ssize_t */
+#if H5_SIZEOF_H5_STAT_SIZE_T < H5_SIZEOF_SSIZE_T
+    #define ASSIGN_h5_stat_size_t_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_H5_STAT_SIZE_T > H5_SIZEOF_SSIZE_T
+    #define ASSIGN_h5_stat_size_t_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_H5_STAT_SIZE_T == H5_SIZEOF_SSIZE_T */
+    #define ASSIGN_h5_stat_size_t_TO_ssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: h5_stat_size_t dst: ssize_t */
+
+/* src: h5_stat_size_t, dst: haddr_t */
+#if H5_SIZEOF_H5_STAT_SIZE_T < H5_SIZEOF_HADDR_T
+    #define ASSIGN_h5_stat_size_t_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_H5_STAT_SIZE_T > H5_SIZEOF_HADDR_T
+    #define ASSIGN_h5_stat_size_t_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_H5_STAT_SIZE_T == H5_SIZEOF_HADDR_T */
+    #define ASSIGN_h5_stat_size_t_TO_haddr_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: h5_stat_size_t dst: haddr_t */
+
+/* src: h5_stat_size_t, dst: hsize_t */
+#if H5_SIZEOF_H5_STAT_SIZE_T < H5_SIZEOF_HSIZE_T
+    #define ASSIGN_h5_stat_size_t_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_H5_STAT_SIZE_T > H5_SIZEOF_HSIZE_T
+    #define ASSIGN_h5_stat_size_t_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_H5_STAT_SIZE_T == H5_SIZEOF_HSIZE_T */
+    #define ASSIGN_h5_stat_size_t_TO_hsize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: h5_stat_size_t dst: hsize_t */
+
+/* src: h5_stat_size_t, dst: hssize_t */
+#if H5_SIZEOF_H5_STAT_SIZE_T < H5_SIZEOF_HSSIZE_T
+    #define ASSIGN_h5_stat_size_t_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#elif H5_SIZEOF_H5_STAT_SIZE_T > H5_SIZEOF_HSSIZE_T
+    #define ASSIGN_h5_stat_size_t_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype)
+#else /* H5_SIZEOF_H5_STAT_SIZE_T == H5_SIZEOF_HSSIZE_T */
+    #define ASSIGN_h5_stat_size_t_TO_hssize_t(dst, dsttype, src, srctype) \
+        ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype)
+#endif /* src: h5_stat_size_t dst: hssize_t */
+
+#endif /* H5overflow_H */
+
diff --git a/privatemodules/nc4/include/H5pubconf.h b/privatemodules/nc4/include/H5pubconf.h
new file mode 100644
index 0000000000000000000000000000000000000000..cfa33dbc227476fa038d4a55989b0ba343c11b7f
--- /dev/null
+++ b/privatemodules/nc4/include/H5pubconf.h
@@ -0,0 +1,724 @@
+/* src/H5config.h.  Generated from H5config.h.in by configure.  */
+/* src/H5config.h.in.  Generated from configure.ac by autoheader.  */
+
+/* Define if building universal (internal helper macro) */
+/* #undef H5_AC_APPLE_UNIVERSAL_BUILD */
+
+/* Define if your system generates wrong code for log2 routine. */
+/* #undef H5_BAD_LOG2_CODE_GENERATED */
+
+/* Define if the memory buffers being written to disk should be cleared before
+   writing. */
+#define H5_CLEAR_MEMORY 1
+
+/* Define if your system can handle converting denormalized floating-point
+   values. */
+#define H5_CONVERT_DENORMAL_FLOAT 1
+
+/* Define if C++ compiler recognizes offsetof */
+/* #undef H5_CXX_HAVE_OFFSETOF */
+
+/* Define the default plugins path to compile */
+#define H5_DEFAULT_PLUGINDIR "/usr/local/hdf5/lib/plugin"
+
+/* Define the default virtual file driver to compile */
+#define H5_DEFAULT_VFD H5FD_SEC2
+
+/* Define if `dev_t' is a scalar */
+#define H5_DEV_T_IS_SCALAR 1
+
+/* Define to dummy `main' function (if any) required to link to the Fortran
+   libraries. */
+/* #undef H5_FC_DUMMY_MAIN */
+
+/* Define if F77 and FC dummy `main' functions are identical. */
+/* #undef H5_FC_DUMMY_MAIN_EQ_F77 */
+
+/* Define to a macro mangling the given C identifier (in lower and upper
+   case), which must not contain underscores, for linking with Fortran. */
+/* #undef H5_FC_FUNC */
+
+/* As FC_FUNC, but for C identifiers containing underscores. */
+/* #undef H5_FC_FUNC_ */
+
+/* Define if your system can handle overflow converting floating-point to
+   integer values. */
+#define H5_FP_TO_INTEGER_OVERFLOW_WORKS 1
+
+/* Define if your system roundup accurately converting floating-point to
+   unsigned long long values. */
+#define H5_FP_TO_ULLONG_ACCURATE 1
+
+/* Define if your system has right maximum convert floating-point to unsigned
+   long long values. */
+#define H5_FP_TO_ULLONG_RIGHT_MAXIMUM 1
+
+/* Define if gettimeofday() populates the tz pointer passed in */
+#define H5_GETTIMEOFDAY_GIVES_TZ 1
+
+/* Define to 1 if you have the `alarm' function. */
+#define H5_HAVE_ALARM 1
+
+/* Define if the __attribute__(()) extension is present */
+#define H5_HAVE_ATTRIBUTE 1
+
+/* Define to 1 if you have the `BSDgettimeofday' function. */
+/* #undef H5_HAVE_BSDGETTIMEOFDAY */
+
+/* Define if the compiler understands C99 designated initialization of structs
+   and unions */
+#define H5_HAVE_C99_DESIGNATED_INITIALIZER 1
+
+/* Define if the compiler understands the __func__ keyword */
+#define H5_HAVE_C99_FUNC 1
+
+/* Define to 1 if you have the `clock_gettime' function. */
+#define H5_HAVE_CLOCK_GETTIME 1
+
+/* Define if the function stack tracing code is to be compiled in */
+/* #undef H5_HAVE_CODESTACK */
+
+/* Define if Darwin or Mac OS X */
+/* #undef H5_HAVE_DARWIN */
+
+/* Define to 1 if you have the declaration of `tzname', and to 0 if you don't.
+   */
+/* #undef H5_HAVE_DECL_TZNAME */
+
+/* Define to 1 if you have the `difftime' function. */
+#define H5_HAVE_DIFFTIME 1
+
+/* Define if the direct I/O virtual file driver should be compiled */
+/* #undef H5_HAVE_DIRECT */
+
+/* Define to 1 if you have the <dirent.h> header file. */
+#define H5_HAVE_DIRENT_H 1
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#define H5_HAVE_DLFCN_H 1
+
+/* Define to 1 if you have the <dmalloc.h> header file. */
+/* #undef H5_HAVE_DMALLOC_H */
+
+/* Define if library information should be embedded in the executables */
+#define H5_HAVE_EMBEDDED_LIBINFO 1
+
+/* Define to 1 if you have the <features.h> header file. */
+#define H5_HAVE_FEATURES_H 1
+
+/* Define if support for deflate (zlib) filter is enabled */
+#define H5_HAVE_FILTER_DEFLATE 1
+
+/* Define if support for Fletcher32 checksum is enabled */
+#define H5_HAVE_FILTER_FLETCHER32 1
+
+/* Define if support for nbit filter is enabled */
+#define H5_HAVE_FILTER_NBIT 1
+
+/* Define if support for scaleoffset filter is enabled */
+#define H5_HAVE_FILTER_SCALEOFFSET 1
+
+/* Define if support for shuffle filter is enabled */
+#define H5_HAVE_FILTER_SHUFFLE 1
+
+/* Define if support for szip filter is enabled */
+/* #undef H5_HAVE_FILTER_SZIP */
+
+/* Define to 1 if you have the `fork' function. */
+#define H5_HAVE_FORK 1
+
+/* Define to 1 if you have the `frexpf' function. */
+#define H5_HAVE_FREXPF 1
+
+/* Define to 1 if you have the `frexpl' function. */
+#define H5_HAVE_FREXPL 1
+
+/* Define to 1 if you have the `fseeko' function. */
+#define H5_HAVE_FSEEKO 1
+
+/* Define to 1 if you have the `fseeko64' function. */
+#define H5_HAVE_FSEEKO64 1
+
+/* Define to 1 if you have the `fstat64' function. */
+#define H5_HAVE_FSTAT64 1
+
+/* Define to 1 if you have the `ftello' function. */
+#define H5_HAVE_FTELLO 1
+
+/* Define to 1 if you have the `ftello64' function. */
+#define H5_HAVE_FTELLO64 1
+
+/* Define to 1 if you have the `ftruncate64' function. */
+#define H5_HAVE_FTRUNCATE64 1
+
+/* Define if the compiler understands the __FUNCTION__ keyword */
+#define H5_HAVE_FUNCTION 1
+
+/* Define to 1 if you have the `GetConsoleScreenBufferInfo' function. */
+/* #undef H5_HAVE_GETCONSOLESCREENBUFFERINFO */
+
+/* Define to 1 if you have the `gethostname' function. */
+#define H5_HAVE_GETHOSTNAME 1
+
+/* Define to 1 if you have the `getpwuid' function. */
+#define H5_HAVE_GETPWUID 1
+
+/* Define to 1 if you have the `getrusage' function. */
+#define H5_HAVE_GETRUSAGE 1
+
+/* Define to 1 if you have the `gettextinfo' function. */
+/* #undef H5_HAVE_GETTEXTINFO */
+
+/* Define to 1 if you have the `gettimeofday' function. */
+#define H5_HAVE_GETTIMEOFDAY 1
+
+/* Define to 1 if you have the `get_fpc_csr' function. */
+/* #undef H5_HAVE_GET_FPC_CSR */
+
+/* Define if library will contain instrumentation to detect correct
+   optimization operation */
+/* #undef H5_HAVE_INSTRUMENTED_LIBRARY */
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#define H5_HAVE_INTTYPES_H 1
+
+/* Define to 1 if you have the `ioctl' function. */
+#define H5_HAVE_IOCTL 1
+
+/* Define to 1 if you have the <io.h> header file. */
+/* #undef H5_HAVE_IO_H */
+
+/* Define to 1 if you have the `dl' library (-ldl). */
+#define H5_HAVE_LIBDL 1
+
+/* Define to 1 if you have the `dmalloc' library (-ldmalloc). */
+/* #undef H5_HAVE_LIBDMALLOC */
+
+/* Define to 1 if you have the `lmpe' library (-llmpe). */
+/* #undef H5_HAVE_LIBLMPE */
+
+/* Define to 1 if you have the `m' library (-lm). */
+#define H5_HAVE_LIBM 1
+
+/* Define to 1 if you have the `mpe' library (-lmpe). */
+/* #undef H5_HAVE_LIBMPE */
+
+/* Define to 1 if you have the `mpi' library (-lmpi). */
+/* #undef H5_HAVE_LIBMPI */
+
+/* Define to 1 if you have the `mpich' library (-lmpich). */
+/* #undef H5_HAVE_LIBMPICH */
+
+/* Define to 1 if you have the `mpio' library (-lmpio). */
+/* #undef H5_HAVE_LIBMPIO */
+
+/* Define to 1 if you have the `nsl' library (-lnsl). */
+/* #undef H5_HAVE_LIBNSL */
+
+/* Define to 1 if you have the `pthread' library (-lpthread). */
+/* #undef H5_HAVE_LIBPTHREAD */
+
+/* Define to 1 if you have the `socket' library (-lsocket). */
+/* #undef H5_HAVE_LIBSOCKET */
+
+/* Define to 1 if you have the `sz' library (-lsz). */
+/* #undef H5_HAVE_LIBSZ */
+
+/* Define to 1 if you have the `ws2_32' library (-lws2_32). */
+/* #undef H5_HAVE_LIBWS2_32 */
+
+/* Define to 1 if you have the `z' library (-lz). */
+#define H5_HAVE_LIBZ 1
+
+/* Define to 1 if you have the `longjmp' function. */
+#define H5_HAVE_LONGJMP 1
+
+/* Define to 1 if you have the `lseek64' function. */
+#define H5_HAVE_LSEEK64 1
+
+/* Define to 1 if you have the `lstat' function. */
+#define H5_HAVE_LSTAT 1
+
+/* Define to 1 if you have the <mach/mach_time.h> header file. */
+/* #undef H5_HAVE_MACH_MACH_TIME_H */
+
+/* Define to 1 if you have the <memory.h> header file. */
+#define H5_HAVE_MEMORY_H 1
+
+/* Define if we have MPE support */
+/* #undef H5_HAVE_MPE */
+
+/* Define to 1 if you have the <mpe.h> header file. */
+/* #undef H5_HAVE_MPE_H */
+
+/* Define if MPI_File_get_size works correctly */
+/* #undef H5_HAVE_MPI_GET_SIZE */
+
+/* Define if `MPI_Comm_c2f' and `MPI_Comm_f2c' exists */
+/* #undef H5_HAVE_MPI_MULTI_LANG_Comm */
+
+/* Define if `MPI_Info_c2f' and `MPI_Info_f2c' exists */
+/* #undef H5_HAVE_MPI_MULTI_LANG_Info */
+
+/* Define if we have parallel support */
+/* #undef H5_HAVE_PARALLEL */
+
+/* Define to 1 if you have the <pthread.h> header file. */
+/* #undef H5_HAVE_PTHREAD_H */
+
+/* Define to 1 if you have the `random' function. */
+#define H5_HAVE_RANDOM 1
+
+/* Define to 1 if you have the `rand_r' function. */
+#define H5_HAVE_RAND_R 1
+
+/* Define to 1 if you have the `setjmp' function. */
+#define H5_HAVE_SETJMP 1
+
+/* Define to 1 if you have the <setjmp.h> header file. */
+#define H5_HAVE_SETJMP_H 1
+
+/* Define to 1 if you have the `setsysinfo' function. */
+/* #undef H5_HAVE_SETSYSINFO */
+
+/* Define to 1 if you have the `siglongjmp' function. */
+#define H5_HAVE_SIGLONGJMP 1
+
+/* Define to 1 if you have the `signal' function. */
+#define H5_HAVE_SIGNAL 1
+
+/* Define to 1 if you have the `sigprocmask' function. */
+#define H5_HAVE_SIGPROCMASK 1
+
+/* Define to 1 if you have the `sigsetjmp' function. */
+/* #undef H5_HAVE_SIGSETJMP */
+
+/* Define to 1 if you have the `snprintf' function. */
+#define H5_HAVE_SNPRINTF 1
+
+/* Define to 1 if you have the `srandom' function. */
+#define H5_HAVE_SRANDOM 1
+
+/* Define to 1 if you have the `stat64' function. */
+#define H5_HAVE_STAT64 1
+
+/* Define if `struct stat' has the `st_blocks' field */
+#define H5_HAVE_STAT_ST_BLOCKS 1
+
+/* Define to 1 if you have the <stddef.h> header file. */
+#define H5_HAVE_STDDEF_H 1
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#define H5_HAVE_STDINT_H 1
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#define H5_HAVE_STDLIB_H 1
+
+/* Define to 1 if you have the `strdup' function. */
+#define H5_HAVE_STRDUP 1
+
+/* Define to 1 if you have the <strings.h> header file. */
+#define H5_HAVE_STRINGS_H 1
+
+/* Define to 1 if you have the <string.h> header file. */
+#define H5_HAVE_STRING_H 1
+
+/* Define if `struct text_info' is defined */
+/* #undef H5_HAVE_STRUCT_TEXT_INFO */
+
+/* Define if `struct timezone' is defined */
+#define H5_HAVE_STRUCT_TIMEZONE 1
+
+/* Define to 1 if `tm_zone' is a member of `struct tm'. */
+#define H5_HAVE_STRUCT_TM_TM_ZONE 1
+
+/* Define if `struct videoconfig' is defined */
+/* #undef H5_HAVE_STRUCT_VIDEOCONFIG */
+
+/* Define to 1 if you have the `symlink' function. */
+#define H5_HAVE_SYMLINK 1
+
+/* Define to 1 if you have the `system' function. */
+#define H5_HAVE_SYSTEM 1
+
+/* Define to 1 if you have the <sys/fpu.h> header file. */
+/* #undef H5_HAVE_SYS_FPU_H */
+
+/* Define to 1 if you have the <sys/ioctl.h> header file. */
+#define H5_HAVE_SYS_IOCTL_H 1
+
+/* Define to 1 if you have the <sys/proc.h> header file. */
+/* #undef H5_HAVE_SYS_PROC_H */
+
+/* Define to 1 if you have the <sys/resource.h> header file. */
+#define H5_HAVE_SYS_RESOURCE_H 1
+
+/* Define to 1 if you have the <sys/socket.h> header file. */
+#define H5_HAVE_SYS_SOCKET_H 1
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#define H5_HAVE_SYS_STAT_H 1
+
+/* Define to 1 if you have the <sys/sysinfo.h> header file. */
+/* #undef H5_HAVE_SYS_SYSINFO_H */
+
+/* Define to 1 if you have the <sys/timeb.h> header file. */
+#define H5_HAVE_SYS_TIMEB_H 1
+
+/* Define to 1 if you have the <sys/time.h> header file. */
+#define H5_HAVE_SYS_TIME_H 1
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#define H5_HAVE_SYS_TYPES_H 1
+
+/* Define to 1 if you have the <szlib.h> header file. */
+/* #undef H5_HAVE_SZLIB_H */
+
+/* Define if we have thread safe support */
+/* #undef H5_HAVE_THREADSAFE */
+
+/* Define if `timezone' is a global variable */
+/* #undef H5_HAVE_TIMEZONE */
+
+/* Define if the ioctl TIOCGETD is defined */
+#define H5_HAVE_TIOCGETD 1
+
+/* Define if the ioctl TIOGWINSZ is defined */
+#define H5_HAVE_TIOCGWINSZ 1
+
+/* Define to 1 if you have the `tmpfile' function. */
+#define H5_HAVE_TMPFILE 1
+
+/* Define if `tm_gmtoff' is a member of `struct tm' */
+#define H5_HAVE_TM_GMTOFF 1
+
+/* Define to 1 if your `struct tm' has `tm_zone'. Deprecated, use
+   `HAVE_STRUCT_TM_TM_ZONE' instead. */
+#define H5_HAVE_TM_ZONE 1
+
+/* Define to 1 if you don't have `tm_zone' but do have the external array
+   `tzname'. */
+/* #undef H5_HAVE_TZNAME */
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#define H5_HAVE_UNISTD_H 1
+
+/* Define to 1 if you have the `vasprintf' function. */
+#define H5_HAVE_VASPRINTF 1
+
+/* Define to 1 if you have the `vsnprintf' function. */
+#define H5_HAVE_VSNPRINTF 1
+
+/* Define to 1 if you have the `waitpid' function. */
+#define H5_HAVE_WAITPID 1
+
+/* Define if your system has window style path name. */
+/* #undef H5_HAVE_WINDOW_PATH */
+
+/* Define to 1 if you have the <winsock2.h> header file. */
+/* #undef H5_HAVE_WINSOCK2_H */
+
+/* Define to 1 if you have the <zlib.h> header file. */
+#define H5_HAVE_ZLIB_H 1
+
+/* Define to 1 if you have the `_getvideoconfig' function. */
+/* #undef H5_HAVE__GETVIDEOCONFIG */
+
+/* Define to 1 if you have the `_scrsize' function. */
+/* #undef H5_HAVE__SCRSIZE */
+
+/* Define if `__tm_gmtoff' is a member of `struct tm' */
+/* #undef H5_HAVE___TM_GMTOFF */
+
+/* Define if your system can't handle converting floating-point values to long
+   long. */
+/* #undef H5_HW_FP_TO_LLONG_NOT_WORKS */
+
+/* Define if HDF5's high-level library headers should be included in hdf5.h */
+#define H5_INCLUDE_HL 1
+
+/* Define if your system can accurately convert from integers to long double
+   values. */
+#define H5_INTEGER_TO_LDOUBLE_ACCURATE 1
+
+/* Define if your system can convert long double to integers accurately. */
+#define H5_LDOUBLE_TO_INTEGER_ACCURATE 1
+
+/* Define if your system can convert from long double to integer values. */
+#define H5_LDOUBLE_TO_INTEGER_WORKS 1
+
+/* Define if your system can convert long double to (unsigned) long long
+   values correctly. */
+#define H5_LDOUBLE_TO_LLONG_ACCURATE 1
+
+/* Define if your system converts long double to (unsigned) long values with
+   special algorithm. */
+/* #undef H5_LDOUBLE_TO_LONG_SPECIAL */
+
+/* Define if your system can convert long double to unsigned int values
+   correctly. */
+#define H5_LDOUBLE_TO_UINT_ACCURATE 1
+
+/* Define if your system can compile long long to floating-point casts. */
+#define H5_LLONG_TO_FP_CAST_WORKS 1
+
+/* Define if your system can convert (unsigned) long long to long double
+   values correctly. */
+#define H5_LLONG_TO_LDOUBLE_CORRECT 1
+
+/* Define if your system can convert (unsigned) long to long double values
+   with special algorithm. */
+/* #undef H5_LONG_TO_LDOUBLE_SPECIAL */
+
+/* Define to the sub-directory in which libtool stores uninstalled libraries.
+   */
+#define H5_LT_OBJDIR ".libs/"
+
+/* Define if the metadata trace file code is to be compiled in */
+/* #undef H5_METADATA_TRACE_FILE */
+
+/* Define if your system's `MPI_File_set_size' function works for files over
+   2GB. */
+/* #undef H5_MPI_FILE_SET_SIZE_BIG */
+
+/* Define if we can violate pointer alignment restrictions */
+#define H5_NO_ALIGNMENT_RESTRICTIONS 1
+
+/* Define if deprecated public API symbols are disabled */
+/* #undef H5_NO_DEPRECATED_SYMBOLS */
+
+/* Define if shared writing must be disabled (CodeWarrior only) */
+/* #undef H5_NO_SHARED_WRITING */
+
+/* Name of package */
+#define H5_PACKAGE "hdf5"
+
+/* Define to the address where bug reports for this package should be sent. */
+#define H5_PACKAGE_BUGREPORT "help@hdfgroup.org"
+
+/* Define to the full name of this package. */
+#define H5_PACKAGE_NAME "HDF5"
+
+/* Define to the full name and version of this package. */
+#define H5_PACKAGE_STRING "HDF5 1.8.13"
+
+/* Define to the one symbol short name of this package. */
+#define H5_PACKAGE_TARNAME "hdf5"
+
+/* Define to the home page for this package. */
+#define H5_PACKAGE_URL ""
+
+/* Define to the version of this package. */
+#define H5_PACKAGE_VERSION "1.8.13"
+
+/* Width for printf() for type `long long' or `__int64', use `ll' */
+#define H5_PRINTF_LL_WIDTH "l"
+
+/* The size of `char', as computed by sizeof. */
+#define H5_SIZEOF_CHAR 1
+
+/* The size of `double', as computed by sizeof. */
+#define H5_SIZEOF_DOUBLE 8
+
+/* The size of `float', as computed by sizeof. */
+#define H5_SIZEOF_FLOAT 4
+
+/* The size of `int', as computed by sizeof. */
+#define H5_SIZEOF_INT 4
+
+/* The size of `int16_t', as computed by sizeof. */
+#define H5_SIZEOF_INT16_T 2
+
+/* The size of `int32_t', as computed by sizeof. */
+#define H5_SIZEOF_INT32_T 4
+
+/* The size of `int64_t', as computed by sizeof. */
+#define H5_SIZEOF_INT64_T 8
+
+/* The size of `int8_t', as computed by sizeof. */
+#define H5_SIZEOF_INT8_T 1
+
+/* The size of `int_fast16_t', as computed by sizeof. */
+#define H5_SIZEOF_INT_FAST16_T 8
+
+/* The size of `int_fast32_t', as computed by sizeof. */
+#define H5_SIZEOF_INT_FAST32_T 8
+
+/* The size of `int_fast64_t', as computed by sizeof. */
+#define H5_SIZEOF_INT_FAST64_T 8
+
+/* The size of `int_fast8_t', as computed by sizeof. */
+#define H5_SIZEOF_INT_FAST8_T 1
+
+/* The size of `int_least16_t', as computed by sizeof. */
+#define H5_SIZEOF_INT_LEAST16_T 2
+
+/* The size of `int_least32_t', as computed by sizeof. */
+#define H5_SIZEOF_INT_LEAST32_T 4
+
+/* The size of `int_least64_t', as computed by sizeof. */
+#define H5_SIZEOF_INT_LEAST64_T 8
+
+/* The size of `int_least8_t', as computed by sizeof. */
+#define H5_SIZEOF_INT_LEAST8_T 1
+
+/* The size of `long', as computed by sizeof. */
+#define H5_SIZEOF_LONG 8
+
+/* The size of `long double', as computed by sizeof. */
+#define H5_SIZEOF_LONG_DOUBLE 16
+
+/* The size of `long long', as computed by sizeof. */
+#define H5_SIZEOF_LONG_LONG 8
+
+/* The size of `off64_t', as computed by sizeof. */
+#define H5_SIZEOF_OFF64_T 8
+
+/* The size of `off_t', as computed by sizeof. */
+#define H5_SIZEOF_OFF_T 8
+
+/* The size of `ptrdiff_t', as computed by sizeof. */
+#define H5_SIZEOF_PTRDIFF_T 8
+
+/* The size of `short', as computed by sizeof. */
+#define H5_SIZEOF_SHORT 2
+
+/* The size of `size_t', as computed by sizeof. */
+#define H5_SIZEOF_SIZE_T 8
+
+/* The size of `ssize_t', as computed by sizeof. */
+#define H5_SIZEOF_SSIZE_T 8
+
+/* The size of `uint16_t', as computed by sizeof. */
+#define H5_SIZEOF_UINT16_T 2
+
+/* The size of `uint32_t', as computed by sizeof. */
+#define H5_SIZEOF_UINT32_T 4
+
+/* The size of `uint64_t', as computed by sizeof. */
+#define H5_SIZEOF_UINT64_T 8
+
+/* The size of `uint8_t', as computed by sizeof. */
+#define H5_SIZEOF_UINT8_T 1
+
+/* The size of `uint_fast16_t', as computed by sizeof. */
+#define H5_SIZEOF_UINT_FAST16_T 8
+
+/* The size of `uint_fast32_t', as computed by sizeof. */
+#define H5_SIZEOF_UINT_FAST32_T 8
+
+/* The size of `uint_fast64_t', as computed by sizeof. */
+#define H5_SIZEOF_UINT_FAST64_T 8
+
+/* The size of `uint_fast8_t', as computed by sizeof. */
+#define H5_SIZEOF_UINT_FAST8_T 1
+
+/* The size of `uint_least16_t', as computed by sizeof. */
+#define H5_SIZEOF_UINT_LEAST16_T 2
+
+/* The size of `uint_least32_t', as computed by sizeof. */
+#define H5_SIZEOF_UINT_LEAST32_T 4
+
+/* The size of `uint_least64_t', as computed by sizeof. */
+#define H5_SIZEOF_UINT_LEAST64_T 8
+
+/* The size of `uint_least8_t', as computed by sizeof. */
+#define H5_SIZEOF_UINT_LEAST8_T 1
+
+/* The size of `unsigned', as computed by sizeof. */
+#define H5_SIZEOF_UNSIGNED 4
+
+/* The size of `__int64', as computed by sizeof. */
+#define H5_SIZEOF___INT64 0
+
+/* Define to 1 if you have the ANSI C header files. */
+#define H5_STDC_HEADERS 1
+
+/* Define if strict file format checks are enabled */
+/* #undef H5_STRICT_FORMAT_CHECKS */
+
+/* Define if your system supports pthread_attr_setscope(&attribute,
+   PTHREAD_SCOPE_SYSTEM) call. */
+#define H5_SYSTEM_SCOPE_THREADS 1
+
+/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
+#define H5_TIME_WITH_SYS_TIME 1
+
+/* Define to 1 if your <sys/time.h> declares `struct tm'. */
+/* #undef H5_TM_IN_SYS_TIME */
+
+/* Define if your system can compile unsigned long long to floating-point
+   casts. */
+#define H5_ULLONG_TO_FP_CAST_WORKS 1
+
+/* Define if your system can convert unsigned long long to long double with
+   correct precision. */
+#define H5_ULLONG_TO_LDOUBLE_PRECISION 1
+
+/* Define if your system accurately converting unsigned long to float values.
+   */
+#define H5_ULONG_TO_FLOAT_ACCURATE 1
+
+/* Define if your system can accurately convert unsigned (long) long values to
+   floating-point values. */
+#define H5_ULONG_TO_FP_BOTTOM_BIT_ACCURATE 1
+
+/* Define using v1.6 public API symbols by default */
+/* #undef H5_USE_16_API_DEFAULT */
+
+/* Define if a memory checking tool will be used on the library, to cause
+   library to be very picky about memory operations and also disable the
+   internal free list manager code. */
+/* #undef H5_USING_MEMCHECKER */
+
+/* Version number of package */
+#define H5_VERSION "1.8.13"
+
+/* Define if vsnprintf() returns the correct value for formatted strings that
+   don't fit into size allowed */
+#define H5_VSNPRINTF_WORKS 1
+
+/* Data accuracy is prefered to speed during data conversions */
+#define H5_WANT_DATA_ACCURACY 1
+
+/* Check exception handling functions during data conversions */
+#define H5_WANT_DCONV_EXCEPTION 1
+
+/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
+   significant byte first (like Motorola and SPARC, unlike Intel). */
+#if defined AC_APPLE_UNIVERSAL_BUILD
+# if defined __BIG_ENDIAN__
+#  define WORDS_BIGENDIAN 1
+# endif
+#else
+# ifndef WORDS_BIGENDIAN
+/* #  undef WORDS_BIGENDIAN */
+# endif
+#endif
+
+/* Number of bits in a file offset, on hosts where this is settable. */
+/* #undef H5__FILE_OFFSET_BITS */
+
+/* Define for large files, on AIX-style hosts. */
+/* #undef H5__LARGE_FILES */
+
+/* Define to empty if `const' does not conform to ANSI C. */
+/* #undef H5_const */
+
+/* Define to `__inline__' or `__inline' if that's what the C compiler
+   calls it, or to nothing if 'inline' is not supported under any name.  */
+#ifndef __cplusplus
+#define H5_inline __inline__
+#endif
+
+/* Define to `long int' if <sys/types.h> does not define. */
+/* #undef H5_off_t */
+
+/* Define to `long' if <sys/types.h> does not define. */
+/* #undef H5_ptrdiff_t */
+
+/* Define to `unsigned long' if <sys/types.h> does not define. */
+/* #undef H5_size_t */
+
+/* Define to `long' if <sys/types.h> does not define. */
+/* #undef H5_ssize_t */
diff --git a/privatemodules/nc4/include/H5public.h b/privatemodules/nc4/include/H5public.h
new file mode 100644
index 0000000000000000000000000000000000000000..aaf0d749847fc8628e2f83328cbe7a8e864203b4
--- /dev/null
+++ b/privatemodules/nc4/include/H5public.h
@@ -0,0 +1,343 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * This file contains public declarations for the HDF5 module.
+ */
+#ifndef _H5public_H
+#define _H5public_H
+
+/* Include files for public use... */
+/*
+ * Since H5pubconf.h is a generated header file, it is messy to try
+ * to put a #ifndef _H5pubconf_H ... #endif guard in it.
+ * HDF5 has set an internal rule that it is being included here.
+ * Source files should NOT include H5pubconf.h directly but include
+ * it via H5public.h.  The #ifndef _H5public_H guard above would
+ * prevent repeated include.
+ */
+#include "H5pubconf.h"		/*from configure                             */
+
+/* API Version macro wrapper definitions */
+#include "H5version.h"
+
+#ifdef H5_HAVE_FEATURES_H
+#include <features.h>           /*for setting POSIX, BSD, etc. compatibility */
+#endif
+#ifdef H5_HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef H5_STDC_HEADERS
+#   include <limits.h>		/*for H5T_NATIVE_CHAR defn in H5Tpublic.h    */
+#endif
+#ifndef __cplusplus
+# ifdef H5_HAVE_STDINT_H
+#   include <stdint.h>		/*for C9x types				     */
+# endif
+#else
+# ifdef H5_HAVE_STDINT_H_CXX
+#   include <stdint.h>		/*for C9x types	when include from C++	     */
+# endif
+#endif
+#ifdef H5_HAVE_INTTYPES_H
+#   include <inttypes.h>        /* For uint64_t on some platforms            */
+#endif
+#ifdef H5_HAVE_STDDEF_H
+#   include <stddef.h>
+#endif
+#ifdef H5_HAVE_PARALLEL
+#   include <mpi.h>
+#ifndef MPI_FILE_NULL		/*MPIO may be defined in mpi.h already       */
+#   include <mpio.h>
+#endif
+#endif
+
+
+/* Include the Windows API adapter header early */
+#include "H5api_adpt.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Macros for enabling/disabling particular GCC warnings */
+/* (see the following web-sites for more info:
+ *      http://www.dbp-consulting.com/tutorials/SuppressingGCCWarnings.html
+ *      http://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html#Diagnostic-Pragmas
+ */
+/* These pragmas are only implemented usefully in gcc 4.6+ */
+#if ((__GNUC__ * 100) + __GNUC_MINOR__) >= 406
+    #define H5_GCC_DIAG_STR(s) #s
+    #define H5_GCC_DIAG_JOINSTR(x,y) H5_GCC_DIAG_STR(x ## y)
+    #define H5_GCC_DIAG_DO_PRAGMA(x) _Pragma (#x)
+    #define H5_GCC_DIAG_PRAGMA(x) H5_GCC_DIAG_DO_PRAGMA(GCC diagnostic x)
+
+    #define H5_GCC_DIAG_OFF(x) H5_GCC_DIAG_PRAGMA(push) H5_GCC_DIAG_PRAGMA(ignored H5_GCC_DIAG_JOINSTR(-W,x))
+    #define H5_GCC_DIAG_ON(x) H5_GCC_DIAG_PRAGMA(pop)
+#else
+    #define H5_GCC_DIAG_OFF(x)
+    #define H5_GCC_DIAG_ON(x)
+#endif
+
+/* Version numbers */
+#define H5_VERS_MAJOR	1	/* For major interface/format changes  	     */
+#define H5_VERS_MINOR	8	/* For minor interface/format changes  	     */
+#define H5_VERS_RELEASE	13	/* For tweaks, bug-fixes, or development     */
+#define H5_VERS_SUBRELEASE ""	/* For pre-releases like snap0       */
+				/* Empty string for real releases.           */
+#define H5_VERS_INFO    "HDF5 library version: 1.8.13"      /* Full version string */
+
+#define H5check()	H5check_version(H5_VERS_MAJOR,H5_VERS_MINOR,	      \
+				        H5_VERS_RELEASE)
+
+/* macros for comparing the version */
+#define H5_VERSION_GE(Maj,Min,Rel) \
+       (((H5_VERS_MAJOR==Maj) && (H5_VERS_MINOR==Min) && (H5_VERS_RELEASE>=Rel)) || \
+        ((H5_VERS_MAJOR==Maj) && (H5_VERS_MINOR>Min)) || \
+        (H5_VERS_MAJOR>Maj))
+
+#define H5_VERSION_LE(Maj,Min,Rel) \
+       (((H5_VERS_MAJOR==Maj) && (H5_VERS_MINOR==Min) && (H5_VERS_RELEASE<=Rel)) || \
+        ((H5_VERS_MAJOR==Maj) && (H5_VERS_MINOR<Min)) || \
+        (H5_VERS_MAJOR<Maj))
+
+/*
+ * Status return values.  Failed integer functions in HDF5 result almost
+ * always in a negative value (unsigned failing functions sometimes return
+ * zero for failure) while successfull return is non-negative (often zero).
+ * The negative failure value is most commonly -1, but don't bet on it.  The
+ * proper way to detect failure is something like:
+ *
+ * 	if((dset = H5Dopen2(file, name)) < 0)
+ *	    fprintf(stderr, "unable to open the requested dataset\n");
+ */
+typedef int herr_t;
+
+
+/*
+ * Boolean type.  Successful return values are zero (false) or positive
+ * (true). The typical true value is 1 but don't bet on it.  Boolean
+ * functions cannot fail.  Functions that return `htri_t' however return zero
+ * (false), positive (true), or negative (failure). The proper way to test
+ * for truth from a htri_t function is:
+ *
+ * 	if ((retval = H5Tcommitted(type))>0) {
+ *	    printf("data type is committed\n");
+ *	} else if (!retval) {
+ * 	    printf("data type is not committed\n");
+ *	} else {
+ * 	    printf("error determining whether data type is committed\n");
+ *	}
+ */
+typedef unsigned int hbool_t;
+typedef int htri_t;
+
+/* Define the ssize_t type if it not is defined */
+#if H5_SIZEOF_SSIZE_T==0
+/* Undefine this size, we will re-define it in one of the sections below */
+#undef H5_SIZEOF_SSIZE_T
+#if H5_SIZEOF_SIZE_T==H5_SIZEOF_INT
+typedef int ssize_t;
+#       define H5_SIZEOF_SSIZE_T H5_SIZEOF_INT
+#elif H5_SIZEOF_SIZE_T==H5_SIZEOF_LONG
+typedef long ssize_t;
+#       define H5_SIZEOF_SSIZE_T H5_SIZEOF_LONG
+#elif H5_SIZEOF_SIZE_T==H5_SIZEOF_LONG_LONG
+typedef long long ssize_t;
+#       define H5_SIZEOF_SSIZE_T H5_SIZEOF_LONG_LONG
+#else /* Can't find matching type for ssize_t */
+#   error "nothing appropriate for ssize_t"
+#endif
+#endif
+
+/*
+ * The sizes of file objects have their own types defined here, use a 64-bit
+ * type.
+ */
+#if H5_SIZEOF_LONG_LONG >= 8
+H5_GCC_DIAG_OFF(long-long)
+typedef unsigned long long 	hsize_t;
+typedef signed long long	hssize_t;
+H5_GCC_DIAG_ON(long-long)
+#       define H5_SIZEOF_HSIZE_T H5_SIZEOF_LONG_LONG
+#       define H5_SIZEOF_HSSIZE_T H5_SIZEOF_LONG_LONG
+#else
+#   error "nothing appropriate for hsize_t"
+#endif
+
+/*
+ * File addresses have their own types.
+ */
+#if H5_SIZEOF_INT64_T>=8
+    typedef uint64_t                haddr_t;
+#   define HADDR_UNDEF              ((haddr_t)(int64_t)(-1))
+#   define H5_SIZEOF_HADDR_T        H5_SIZEOF_INT64_T
+#   ifdef H5_HAVE_PARALLEL
+#       define HADDR_AS_MPI_TYPE    MPI_LONG_LONG_INT
+#   endif  /* H5_HAVE_PARALLEL */
+#elif H5_SIZEOF_INT>=8
+    typedef unsigned                haddr_t;
+#   define HADDR_UNDEF              ((haddr_t)(-1))
+#   define H5_SIZEOF_HADDR_T        H5_SIZEOF_INT
+#   ifdef H5_HAVE_PARALLEL
+#       define HADDR_AS_MPI_TYPE    MPI_UNSIGNED
+#   endif  /* H5_HAVE_PARALLEL */
+#elif H5_SIZEOF_LONG>=8
+    typedef unsigned long           haddr_t;
+#   define HADDR_UNDEF              ((haddr_t)(long)(-1))
+#   define H5_SIZEOF_HADDR_T        H5_SIZEOF_LONG
+#   ifdef H5_HAVE_PARALLEL
+#       define HADDR_AS_MPI_TYPE    MPI_UNSIGNED_LONG
+#   endif  /* H5_HAVE_PARALLEL */
+#elif H5_SIZEOF_LONG_LONG>=8
+    typedef unsigned long long      haddr_t;
+#   define HADDR_UNDEF              ((haddr_t)(long long)(-1))
+#   define H5_SIZEOF_HADDR_T        H5_SIZEOF_LONG_LONG
+#   ifdef H5_HAVE_PARALLEL
+#       define HADDR_AS_MPI_TYPE    MPI_LONG_LONG_INT
+#   endif  /* H5_HAVE_PARALLEL */
+#else
+#   error "nothing appropriate for haddr_t"
+#endif
+#if H5_SIZEOF_HADDR_T ==H5_SIZEOF_INT
+#   define H5_PRINTF_HADDR_FMT  "%u"
+#elif H5_SIZEOF_HADDR_T ==H5_SIZEOF_LONG
+#   define H5_PRINTF_HADDR_FMT  "%lu"
+#elif H5_SIZEOF_HADDR_T ==H5_SIZEOF_LONG_LONG
+#   define H5_PRINTF_HADDR_FMT  "%" H5_PRINTF_LL_WIDTH "u"
+#else
+#   error "nothing appropriate for H5_PRINTF_HADDR_FMT"
+#endif
+#define HADDR_MAX		(HADDR_UNDEF-1)
+
+/* uint32_t type is used for creation order field for messages.  It may be
+ * defined in Posix.1g, otherwise it is defined here.
+ */
+#if H5_SIZEOF_UINT32_T>=4
+#elif H5_SIZEOF_SHORT>=4
+    typedef short uint32_t;
+#   undef H5_SIZEOF_UINT32_T
+#   define H5_SIZEOF_UINT32_T H5_SIZEOF_SHORT
+#elif H5_SIZEOF_INT>=4
+    typedef unsigned int uint32_t;
+#   undef H5_SIZEOF_UINT32_T
+#   define H5_SIZEOF_UINT32_T H5_SIZEOF_INT
+#elif H5_SIZEOF_LONG>=4
+    typedef unsigned long uint32_t;
+#   undef H5_SIZEOF_UINT32_T
+#   define H5_SIZEOF_UINT32_T H5_SIZEOF_LONG
+#else
+#   error "nothing appropriate for uint32_t"
+#endif
+
+/* int64_t type is used for creation order field for links.  It may be
+ * defined in Posix.1g, otherwise it is defined here.
+ */
+#if H5_SIZEOF_INT64_T>=8
+#elif H5_SIZEOF_INT>=8
+    typedef int int64_t;
+#   undef H5_SIZEOF_INT64_T
+#   define H5_SIZEOF_INT64_T H5_SIZEOF_INT
+#elif H5_SIZEOF_LONG>=8
+    typedef long int64_t;
+#   undef H5_SIZEOF_INT64_T
+#   define H5_SIZEOF_INT64_T H5_SIZEOF_LONG
+#elif H5_SIZEOF_LONG_LONG>=8
+    typedef long long int64_t;
+#   undef H5_SIZEOF_INT64_T
+#   define H5_SIZEOF_INT64_T H5_SIZEOF_LONG_LONG
+#else
+#   error "nothing appropriate for int64_t"
+#endif
+
+/* uint64_t type is used for fields for H5O_info_t.  It may be
+ * defined in Posix.1g, otherwise it is defined here.
+ */
+#if H5_SIZEOF_UINT64_T>=8
+#elif H5_SIZEOF_INT>=8
+    typedef unsigned uint64_t;
+#   undef H5_SIZEOF_UINT64_T
+#   define H5_SIZEOF_UINT64_T H5_SIZEOF_INT
+#elif H5_SIZEOF_LONG>=8
+    typedef unsigned long uint64_t;
+#   undef H5_SIZEOF_UINT64_T
+#   define H5_SIZEOF_UINT64_T H5_SIZEOF_LONG
+#elif H5_SIZEOF_LONG_LONG>=8
+    typedef unsigned long long uint64_t;
+#   undef H5_SIZEOF_UINT64_T
+#   define H5_SIZEOF_UINT64_T H5_SIZEOF_LONG_LONG
+#else
+#   error "nothing appropriate for uint64_t"
+#endif
+
+/* Default value for all property list classes */
+#define H5P_DEFAULT     0
+
+/* Common iteration orders */
+typedef enum {
+    H5_ITER_UNKNOWN = -1,       /* Unknown order */
+    H5_ITER_INC,                /* Increasing order */
+    H5_ITER_DEC,                /* Decreasing order */
+    H5_ITER_NATIVE,             /* No particular order, whatever is fastest */
+    H5_ITER_N		        /* Number of iteration orders */
+} H5_iter_order_t;
+
+/* Iteration callback values */
+/* (Actually, any postive value will cause the iterator to stop and pass back
+ *      that positive value to the function that called the iterator)
+ */
+#define H5_ITER_ERROR   (-1)
+#define H5_ITER_CONT    (0)
+#define H5_ITER_STOP    (1)
+
+/*
+ * The types of indices on links in groups/attributes on objects.
+ * Primarily used for "<do> <foo> by index" routines and for iterating over
+ * links in groups/attributes on objects.
+ */
+typedef enum H5_index_t {
+    H5_INDEX_UNKNOWN = -1,	/* Unknown index type			*/
+    H5_INDEX_NAME,		/* Index on names 			*/
+    H5_INDEX_CRT_ORDER,		/* Index on creation order 		*/
+    H5_INDEX_N			/* Number of indices defined 		*/
+} H5_index_t;
+
+/*
+ * Storage info struct used by H5O_info_t and H5F_info_t
+ */
+typedef struct H5_ih_info_t {
+    hsize_t     index_size;     /* btree and/or list */
+    hsize_t     heap_size;
+} H5_ih_info_t;
+
+/* Functions in H5.c */
+H5_DLL herr_t H5open(void);
+H5_DLL herr_t H5close(void);
+H5_DLL herr_t H5dont_atexit(void);
+H5_DLL herr_t H5garbage_collect(void);
+H5_DLL herr_t H5set_free_list_limits (int reg_global_lim, int reg_list_lim,
+                int arr_global_lim, int arr_list_lim, int blk_global_lim,
+                int blk_list_lim);
+H5_DLL herr_t H5get_libversion(unsigned *majnum, unsigned *minnum,
+				unsigned *relnum);
+H5_DLL herr_t H5check_version(unsigned majnum, unsigned minnum,
+			       unsigned relnum);
+H5_DLL herr_t H5free_memory(void *mem);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
+
diff --git a/privatemodules/nc4/include/H5version.h b/privatemodules/nc4/include/H5version.h
new file mode 100644
index 0000000000000000000000000000000000000000..58de2abafd097fe62acc19bf2799aa8a5011a90f
--- /dev/null
+++ b/privatemodules/nc4/include/H5version.h
@@ -0,0 +1,419 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/* Generated automatically by bin/make_vers -- do not edit */
+/* Add new versioned symbols to H5vers.txt file */
+
+
+#ifndef _H5version_H
+#define _H5version_H
+
+/* Issue error if contradicting macros have been defined. */
+#if defined(H5_USE_16_API) && defined(H5_NO_DEPRECATED_SYMBOLS)
+#error "Can't choose old API versions when deprecated APIs are disabled"
+#endif /* defined(H5_USE_16_API) && defined(H5_NO_DEPRECATED_SYMBOLS) */
+
+
+/* If a particular "global" version of the library's interfaces is chosen,
+ *      set the versions for the API symbols affected.
+ *
+ * Note: If an application has already chosen a particular version for an
+ *      API symbol, the individual API version macro takes priority.
+ */
+#if defined(H5_USE_16_API_DEFAULT) && !defined(H5_USE_16_API)
+#define H5_USE_16_API 1
+#endif /* H5_USE_16_API_DEFAULT && !H5_USE_16_API */
+
+#ifdef H5_USE_16_API
+
+/*************/
+/* Functions */
+/*************/
+
+#if !defined(H5Acreate_vers)
+#define H5Acreate_vers 1
+#endif /* !defined(H5Acreate_vers) */
+
+#if !defined(H5Aiterate_vers)
+#define H5Aiterate_vers 1
+#endif /* !defined(H5Aiterate_vers) */
+
+#if !defined(H5Dcreate_vers)
+#define H5Dcreate_vers 1
+#endif /* !defined(H5Dcreate_vers) */
+
+#if !defined(H5Dopen_vers)
+#define H5Dopen_vers 1
+#endif /* !defined(H5Dopen_vers) */
+
+#if !defined(H5Eclear_vers)
+#define H5Eclear_vers 1
+#endif /* !defined(H5Eclear_vers) */
+
+#if !defined(H5Eget_auto_vers)
+#define H5Eget_auto_vers 1
+#endif /* !defined(H5Eget_auto_vers) */
+
+#if !defined(H5Eprint_vers)
+#define H5Eprint_vers 1
+#endif /* !defined(H5Eprint_vers) */
+
+#if !defined(H5Epush_vers)
+#define H5Epush_vers 1
+#endif /* !defined(H5Epush_vers) */
+
+#if !defined(H5Eset_auto_vers)
+#define H5Eset_auto_vers 1
+#endif /* !defined(H5Eset_auto_vers) */
+
+#if !defined(H5Ewalk_vers)
+#define H5Ewalk_vers 1
+#endif /* !defined(H5Ewalk_vers) */
+
+#if !defined(H5Gcreate_vers)
+#define H5Gcreate_vers 1
+#endif /* !defined(H5Gcreate_vers) */
+
+#if !defined(H5Gopen_vers)
+#define H5Gopen_vers 1
+#endif /* !defined(H5Gopen_vers) */
+
+#if !defined(H5Pget_filter_vers)
+#define H5Pget_filter_vers 1
+#endif /* !defined(H5Pget_filter_vers) */
+
+#if !defined(H5Pget_filter_by_id_vers)
+#define H5Pget_filter_by_id_vers 1
+#endif /* !defined(H5Pget_filter_by_id_vers) */
+
+#if !defined(H5Pinsert_vers)
+#define H5Pinsert_vers 1
+#endif /* !defined(H5Pinsert_vers) */
+
+#if !defined(H5Pregister_vers)
+#define H5Pregister_vers 1
+#endif /* !defined(H5Pregister_vers) */
+
+#if !defined(H5Rget_obj_type_vers)
+#define H5Rget_obj_type_vers 1
+#endif /* !defined(H5Rget_obj_type_vers) */
+
+#if !defined(H5Tarray_create_vers)
+#define H5Tarray_create_vers 1
+#endif /* !defined(H5Tarray_create_vers) */
+
+#if !defined(H5Tcommit_vers)
+#define H5Tcommit_vers 1
+#endif /* !defined(H5Tcommit_vers) */
+
+#if !defined(H5Tget_array_dims_vers)
+#define H5Tget_array_dims_vers 1
+#endif /* !defined(H5Tget_array_dims_vers) */
+
+#if !defined(H5Topen_vers)
+#define H5Topen_vers 1
+#endif /* !defined(H5Topen_vers) */
+
+/************/
+/* Typedefs */
+/************/
+
+#if !defined(H5E_auto_t_vers)
+#define H5E_auto_t_vers 1
+#endif /* !defined(H5E_auto_t_vers) */
+
+#if !defined(H5Z_class_t_vers)
+#define H5Z_class_t_vers 1
+#endif /* !defined(H5Z_class_t_vers) */
+
+#endif /* H5_USE_16_API */
+
+
+/* Choose the correct version of each API symbol, defaulting to the latest
+ *      version of each.  The "best" name for API parameters/data structures
+ *      that have changed definitions is also set.  An error is issued for
+ *      specifying an invalid API version.
+ */
+
+/*************/
+/* Functions */
+/*************/
+
+#if !defined(H5Acreate_vers) || H5Acreate_vers == 2
+#ifndef H5Acreate_vers
+#define H5Acreate_vers 2
+#endif /* H5Acreate_vers */
+#define H5Acreate H5Acreate2
+#elif H5Acreate_vers == 1
+#define H5Acreate H5Acreate1
+#else /* H5Acreate_vers */
+#error "H5Acreate_vers set to invalid value"
+#endif /* H5Acreate_vers */
+
+#if !defined(H5Aiterate_vers) || H5Aiterate_vers == 2
+#ifndef H5Aiterate_vers
+#define H5Aiterate_vers 2
+#endif /* H5Aiterate_vers */
+#define H5Aiterate H5Aiterate2
+#define H5A_operator_t H5A_operator2_t
+#elif H5Aiterate_vers == 1
+#define H5Aiterate H5Aiterate1
+#define H5A_operator_t H5A_operator1_t
+#else /* H5Aiterate_vers */
+#error "H5Aiterate_vers set to invalid value"
+#endif /* H5Aiterate_vers */
+
+#if !defined(H5Dcreate_vers) || H5Dcreate_vers == 2
+#ifndef H5Dcreate_vers
+#define H5Dcreate_vers 2
+#endif /* H5Dcreate_vers */
+#define H5Dcreate H5Dcreate2
+#elif H5Dcreate_vers == 1
+#define H5Dcreate H5Dcreate1
+#else /* H5Dcreate_vers */
+#error "H5Dcreate_vers set to invalid value"
+#endif /* H5Dcreate_vers */
+
+#if !defined(H5Dopen_vers) || H5Dopen_vers == 2
+#ifndef H5Dopen_vers
+#define H5Dopen_vers 2
+#endif /* H5Dopen_vers */
+#define H5Dopen H5Dopen2
+#elif H5Dopen_vers == 1
+#define H5Dopen H5Dopen1
+#else /* H5Dopen_vers */
+#error "H5Dopen_vers set to invalid value"
+#endif /* H5Dopen_vers */
+
+#if !defined(H5Eclear_vers) || H5Eclear_vers == 2
+#ifndef H5Eclear_vers
+#define H5Eclear_vers 2
+#endif /* H5Eclear_vers */
+#define H5Eclear H5Eclear2
+#elif H5Eclear_vers == 1
+#define H5Eclear H5Eclear1
+#else /* H5Eclear_vers */
+#error "H5Eclear_vers set to invalid value"
+#endif /* H5Eclear_vers */
+
+#if !defined(H5Eget_auto_vers) || H5Eget_auto_vers == 2
+#ifndef H5Eget_auto_vers
+#define H5Eget_auto_vers 2
+#endif /* H5Eget_auto_vers */
+#define H5Eget_auto H5Eget_auto2
+#elif H5Eget_auto_vers == 1
+#define H5Eget_auto H5Eget_auto1
+#else /* H5Eget_auto_vers */
+#error "H5Eget_auto_vers set to invalid value"
+#endif /* H5Eget_auto_vers */
+
+#if !defined(H5Eprint_vers) || H5Eprint_vers == 2
+#ifndef H5Eprint_vers
+#define H5Eprint_vers 2
+#endif /* H5Eprint_vers */
+#define H5Eprint H5Eprint2
+#elif H5Eprint_vers == 1
+#define H5Eprint H5Eprint1
+#else /* H5Eprint_vers */
+#error "H5Eprint_vers set to invalid value"
+#endif /* H5Eprint_vers */
+
+#if !defined(H5Epush_vers) || H5Epush_vers == 2
+#ifndef H5Epush_vers
+#define H5Epush_vers 2
+#endif /* H5Epush_vers */
+#define H5Epush H5Epush2
+#elif H5Epush_vers == 1
+#define H5Epush H5Epush1
+#else /* H5Epush_vers */
+#error "H5Epush_vers set to invalid value"
+#endif /* H5Epush_vers */
+
+#if !defined(H5Eset_auto_vers) || H5Eset_auto_vers == 2
+#ifndef H5Eset_auto_vers
+#define H5Eset_auto_vers 2
+#endif /* H5Eset_auto_vers */
+#define H5Eset_auto H5Eset_auto2
+#elif H5Eset_auto_vers == 1
+#define H5Eset_auto H5Eset_auto1
+#else /* H5Eset_auto_vers */
+#error "H5Eset_auto_vers set to invalid value"
+#endif /* H5Eset_auto_vers */
+
+#if !defined(H5Ewalk_vers) || H5Ewalk_vers == 2
+#ifndef H5Ewalk_vers
+#define H5Ewalk_vers 2
+#endif /* H5Ewalk_vers */
+#define H5Ewalk H5Ewalk2
+#define H5E_error_t H5E_error2_t
+#define H5E_walk_t H5E_walk2_t
+#elif H5Ewalk_vers == 1
+#define H5Ewalk H5Ewalk1
+#define H5E_error_t H5E_error1_t
+#define H5E_walk_t H5E_walk1_t
+#else /* H5Ewalk_vers */
+#error "H5Ewalk_vers set to invalid value"
+#endif /* H5Ewalk_vers */
+
+#if !defined(H5Gcreate_vers) || H5Gcreate_vers == 2
+#ifndef H5Gcreate_vers
+#define H5Gcreate_vers 2
+#endif /* H5Gcreate_vers */
+#define H5Gcreate H5Gcreate2
+#elif H5Gcreate_vers == 1
+#define H5Gcreate H5Gcreate1
+#else /* H5Gcreate_vers */
+#error "H5Gcreate_vers set to invalid value"
+#endif /* H5Gcreate_vers */
+
+#if !defined(H5Gopen_vers) || H5Gopen_vers == 2
+#ifndef H5Gopen_vers
+#define H5Gopen_vers 2
+#endif /* H5Gopen_vers */
+#define H5Gopen H5Gopen2
+#elif H5Gopen_vers == 1
+#define H5Gopen H5Gopen1
+#else /* H5Gopen_vers */
+#error "H5Gopen_vers set to invalid value"
+#endif /* H5Gopen_vers */
+
+#if !defined(H5Pget_filter_vers) || H5Pget_filter_vers == 2
+#ifndef H5Pget_filter_vers
+#define H5Pget_filter_vers 2
+#endif /* H5Pget_filter_vers */
+#define H5Pget_filter H5Pget_filter2
+#elif H5Pget_filter_vers == 1
+#define H5Pget_filter H5Pget_filter1
+#else /* H5Pget_filter_vers */
+#error "H5Pget_filter_vers set to invalid value"
+#endif /* H5Pget_filter_vers */
+
+#if !defined(H5Pget_filter_by_id_vers) || H5Pget_filter_by_id_vers == 2
+#ifndef H5Pget_filter_by_id_vers
+#define H5Pget_filter_by_id_vers 2
+#endif /* H5Pget_filter_by_id_vers */
+#define H5Pget_filter_by_id H5Pget_filter_by_id2
+#elif H5Pget_filter_by_id_vers == 1
+#define H5Pget_filter_by_id H5Pget_filter_by_id1
+#else /* H5Pget_filter_by_id_vers */
+#error "H5Pget_filter_by_id_vers set to invalid value"
+#endif /* H5Pget_filter_by_id_vers */
+
+#if !defined(H5Pinsert_vers) || H5Pinsert_vers == 2
+#ifndef H5Pinsert_vers
+#define H5Pinsert_vers 2
+#endif /* H5Pinsert_vers */
+#define H5Pinsert H5Pinsert2
+#elif H5Pinsert_vers == 1
+#define H5Pinsert H5Pinsert1
+#else /* H5Pinsert_vers */
+#error "H5Pinsert_vers set to invalid value"
+#endif /* H5Pinsert_vers */
+
+#if !defined(H5Pregister_vers) || H5Pregister_vers == 2
+#ifndef H5Pregister_vers
+#define H5Pregister_vers 2
+#endif /* H5Pregister_vers */
+#define H5Pregister H5Pregister2
+#elif H5Pregister_vers == 1
+#define H5Pregister H5Pregister1
+#else /* H5Pregister_vers */
+#error "H5Pregister_vers set to invalid value"
+#endif /* H5Pregister_vers */
+
+#if !defined(H5Rget_obj_type_vers) || H5Rget_obj_type_vers == 2
+#ifndef H5Rget_obj_type_vers
+#define H5Rget_obj_type_vers 2
+#endif /* H5Rget_obj_type_vers */
+#define H5Rget_obj_type H5Rget_obj_type2
+#elif H5Rget_obj_type_vers == 1
+#define H5Rget_obj_type H5Rget_obj_type1
+#else /* H5Rget_obj_type_vers */
+#error "H5Rget_obj_type_vers set to invalid value"
+#endif /* H5Rget_obj_type_vers */
+
+#if !defined(H5Tarray_create_vers) || H5Tarray_create_vers == 2
+#ifndef H5Tarray_create_vers
+#define H5Tarray_create_vers 2
+#endif /* H5Tarray_create_vers */
+#define H5Tarray_create H5Tarray_create2
+#elif H5Tarray_create_vers == 1
+#define H5Tarray_create H5Tarray_create1
+#else /* H5Tarray_create_vers */
+#error "H5Tarray_create_vers set to invalid value"
+#endif /* H5Tarray_create_vers */
+
+#if !defined(H5Tcommit_vers) || H5Tcommit_vers == 2
+#ifndef H5Tcommit_vers
+#define H5Tcommit_vers 2
+#endif /* H5Tcommit_vers */
+#define H5Tcommit H5Tcommit2
+#elif H5Tcommit_vers == 1
+#define H5Tcommit H5Tcommit1
+#else /* H5Tcommit_vers */
+#error "H5Tcommit_vers set to invalid value"
+#endif /* H5Tcommit_vers */
+
+#if !defined(H5Tget_array_dims_vers) || H5Tget_array_dims_vers == 2
+#ifndef H5Tget_array_dims_vers
+#define H5Tget_array_dims_vers 2
+#endif /* H5Tget_array_dims_vers */
+#define H5Tget_array_dims H5Tget_array_dims2
+#elif H5Tget_array_dims_vers == 1
+#define H5Tget_array_dims H5Tget_array_dims1
+#else /* H5Tget_array_dims_vers */
+#error "H5Tget_array_dims_vers set to invalid value"
+#endif /* H5Tget_array_dims_vers */
+
+#if !defined(H5Topen_vers) || H5Topen_vers == 2
+#ifndef H5Topen_vers
+#define H5Topen_vers 2
+#endif /* H5Topen_vers */
+#define H5Topen H5Topen2
+#elif H5Topen_vers == 1
+#define H5Topen H5Topen1
+#else /* H5Topen_vers */
+#error "H5Topen_vers set to invalid value"
+#endif /* H5Topen_vers */
+
+/************/
+/* Typedefs */
+/************/
+
+#if !defined(H5E_auto_t_vers) || H5E_auto_t_vers == 2
+#ifndef H5E_auto_t_vers
+#define H5E_auto_t_vers 2
+#endif /* H5E_auto_t_vers */
+#define H5E_auto_t H5E_auto2_t
+#elif H5E_auto_t_vers == 1
+#define H5E_auto_t H5E_auto1_t
+#else /* H5E_auto_t_vers */
+#error "H5E_auto_t_vers set to invalid value"
+#endif /* H5E_auto_t_vers */
+
+
+#if !defined(H5Z_class_t_vers) || H5Z_class_t_vers == 2
+#ifndef H5Z_class_t_vers
+#define H5Z_class_t_vers 2
+#endif /* H5Z_class_t_vers */
+#define H5Z_class_t H5Z_class2_t
+#elif H5Z_class_t_vers == 1
+#define H5Z_class_t H5Z_class1_t
+#else /* H5Z_class_t_vers */
+#error "H5Z_class_t_vers set to invalid value"
+#endif /* H5Z_class_t_vers */
+
+#endif /* H5version_H */
+
diff --git a/privatemodules/nc4/include/hdf5.h b/privatemodules/nc4/include/hdf5.h
new file mode 100644
index 0000000000000000000000000000000000000000..ef150630f5f6fa8982267b531b9bbaab57104acd
--- /dev/null
+++ b/privatemodules/nc4/include/hdf5.h
@@ -0,0 +1,55 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * This is the main public HDF5 include file.  Put further information in
+ * a particular header file and include that here, don't fill this file with
+ * lots of gunk...
+ */
+#ifndef _HDF5_H
+#define _HDF5_H
+
+#include "H5public.h"
+#include "H5Apublic.h"		/* Attributes				*/
+#include "H5ACpublic.h"		/* Metadata cache			*/
+#include "H5Dpublic.h"		/* Datasets				*/
+#include "H5Epublic.h"		/* Errors				*/
+#include "H5Fpublic.h"		/* Files				*/
+#include "H5FDpublic.h"		/* File drivers				*/
+#include "H5Gpublic.h"		/* Groups				*/
+#include "H5Ipublic.h"		/* ID management			*/
+#include "H5Lpublic.h"		/* Links				*/
+#include "H5MMpublic.h"		/* Memory management			*/
+#include "H5Opublic.h"		/* Object headers			*/
+#include "H5Ppublic.h"		/* Property lists			*/
+#include "H5Rpublic.h"		/* References				*/
+#include "H5Spublic.h"		/* Dataspaces				*/
+#include "H5Tpublic.h"		/* Datatypes				*/
+#include "H5Zpublic.h"		/* Data filters				*/
+
+/* Predefined file drivers */
+#include "H5FDcore.h"		/* Files stored entirely in memory	*/
+#include "H5FDfamily.h"		/* File families 			*/
+#include "H5FDlog.h"        	/* sec2 driver with I/O logging (for debugging) */
+#include "H5FDmpi.h"            /* MPI-based file drivers		*/
+#include "H5FDmulti.h"		/* Usage-partitioned file family	*/
+#include "H5FDsec2.h"		/* POSIX unbuffered file I/O		*/
+#include "H5FDstdio.h"		/* Standard C buffered I/O		*/
+#ifdef H5_HAVE_WINDOWS
+#include "H5FDwindows.h"        /* Windows buffered I/O     */
+#endif
+#include "H5FDdirect.h"     	/* Linux direct I/O			*/
+
+#endif
diff --git a/privatemodules/nc4/include/hdf5_hl.h b/privatemodules/nc4/include/hdf5_hl.h
new file mode 100644
index 0000000000000000000000000000000000000000..46439324e1c2b7b9ff7bd5d4bae3473bc032bbc5
--- /dev/null
+++ b/privatemodules/nc4/include/hdf5_hl.h
@@ -0,0 +1,33 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * This is the main public HDF5 High Level include file.  Put further
+ * information in a particular header file and include that here, don't
+ * fill this file with lots of gunk...
+ */
+
+#ifndef _HDF5_HL_H
+#define _HDF5_HL_H
+
+#include "H5DOpublic.h" /* dataset optimization */
+#include "H5DSpublic.h" /* dimension scales */
+#include "H5LTpublic.h" /* lite */
+#include "H5IMpublic.h" /* image */
+#include "H5TBpublic.h" /* table */
+#include "H5PTpublic.h" /* table */
+
+#endif /*H5_INCLUDE_HL*/
+
diff --git a/privatemodules/nc4/include/netcdf.h b/privatemodules/nc4/include/netcdf.h
new file mode 100644
index 0000000000000000000000000000000000000000..2dbcebef3233ec62cd14ccb2e6e17ce28ed400cd
--- /dev/null
+++ b/privatemodules/nc4/include/netcdf.h
@@ -0,0 +1,1978 @@
+/*! \file
+
+Main header file for the C API.
+
+Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014
+University Corporation for Atmospheric Research/Unidata.
+
+See \ref copyright file for more info.
+*/
+
+#ifndef _NETCDF_
+#define _NETCDF_
+
+#include <stddef.h> /* size_t, ptrdiff_t */
+#include <errno.h>  /* netcdf functions sometimes return system errors */
+
+/* Required for alloca on Windows */
+#if defined(_WIN32) || defined(_WIN64)
+#include <malloc.h>
+#endif
+
+#ifdef _WIN64
+#include <sys/stat.h>
+#endif
+
+/*! The nc_type type is just an int. */
+typedef int nc_type;
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+/*
+ *  The netcdf external data types
+ */
+#define	NC_NAT 	        0	/**< Not A Type */
+#define	NC_BYTE         1	/**< signed 1 byte integer */
+#define	NC_CHAR 	2	/**< ISO/ASCII character */
+#define	NC_SHORT 	3	/**< signed 2 byte integer */
+#define	NC_INT 	        4	/**< signed 4 byte integer */
+#define NC_LONG         NC_INT  /**< \deprecated required for backward compatibility. */
+#define	NC_FLOAT 	5	/**< single precision floating point number */
+#define	NC_DOUBLE 	6	/**< double precision floating point number */
+#define	NC_UBYTE 	7	/**< unsigned 1 byte int */
+#define	NC_USHORT 	8	/**< unsigned 2-byte int */
+#define	NC_UINT 	9	/**< unsigned 4-byte int */
+#define	NC_INT64 	10	/**< signed 8-byte int */
+#define	NC_UINT64 	11	/**< unsigned 8-byte int */
+#define	NC_STRING 	12	/**< string */
+
+#define NC_MAX_ATOMIC_TYPE NC_STRING
+
+/* The following are use internally in support of user-defines
+ * types. They are also the class returned by nc_inq_user_type. */
+#define	NC_VLEN 	13	/**< vlen (variable-length) types */
+#define	NC_OPAQUE 	14	/**< opaque types */
+#define	NC_ENUM 	15	/**< enum types */
+#define	NC_COMPOUND 	16	/**< compound types */
+
+/* Define the first user defined type id (leave some room) */
+#define NC_FIRSTUSERTYPEID 32
+
+/** Default fill value. This is used unless _FillValue attribute
+ * is set.  These values are stuffed into newly allocated space as
+ * appropriate.  The hope is that one might use these to notice that a
+ * particular datum has not been set. */
+/**@{*/
+#define NC_FILL_BYTE	((signed char)-127)
+#define NC_FILL_CHAR	((char)0)
+#define NC_FILL_SHORT	((short)-32767)
+#define NC_FILL_INT	(-2147483647L)
+#define NC_FILL_FLOAT	(9.9692099683868690e+36f) /* near 15 * 2^119 */
+#define NC_FILL_DOUBLE	(9.9692099683868690e+36)
+#define NC_FILL_UBYTE   (255)
+#define NC_FILL_USHORT  (65535)
+#define NC_FILL_UINT    (4294967295U)
+#define NC_FILL_INT64   ((long long)-9223372036854775806LL)
+#define NC_FILL_UINT64  ((unsigned long long)18446744073709551614ULL)
+#define NC_FILL_STRING  ((char *)"")
+/**@}*/
+
+/*! Max or min values for a type. Nothing greater/smaller can be
+ * stored in a netCDF file for their associated types. Recall that a C
+ * compiler may define int to be any length it wants, but a NC_INT is
+ * *always* a 4 byte signed int. On a platform with 64 bit ints,
+ * there will be many ints which are outside the range supported by
+ * NC_INT. But since NC_INT is an external format, it has to mean the
+ * same thing everywhere. */
+/**@{*/
+#define NC_MAX_BYTE 127
+#define NC_MIN_BYTE (-NC_MAX_BYTE-1)
+#define NC_MAX_CHAR 255
+#define NC_MAX_SHORT 32767
+#define NC_MIN_SHORT (-NC_MAX_SHORT - 1)
+#define NC_MAX_INT 2147483647
+#define NC_MIN_INT (-NC_MAX_INT - 1)
+#define NC_MAX_FLOAT 3.402823466e+38f
+#define NC_MIN_FLOAT (-NC_MAX_FLOAT)
+#define NC_MAX_DOUBLE 1.7976931348623157e+308
+#define NC_MIN_DOUBLE (-NC_MAX_DOUBLE)
+#define NC_MAX_UBYTE NC_MAX_CHAR
+#define NC_MAX_USHORT 65535U
+#define NC_MAX_UINT 4294967295U
+#define NC_MAX_INT64 (9223372036854775807LL)
+#define NC_MIN_INT64 (-9223372036854775807LL-1)
+#define NC_MAX_UINT64 (18446744073709551615ULL)
+#define X_INT64_MAX     (9223372036854775807LL)
+#define X_INT64_MIN     (-X_INT64_MAX - 1)
+#define X_UINT64_MAX    (18446744073709551615ULL)
+/**@}*/
+
+/** Name of fill value attribute.  If you wish a variable to use a
+ * different value than the above defaults, create an attribute with
+ * the same type as the variable and this reserved name. The value you
+ * give the attribute will be used as the fill value for that
+ * variable. */
+#define _FillValue	"_FillValue"
+#define NC_FILL		0	/**< Argument to nc_set_fill() to clear NC_NOFILL */
+#define NC_NOFILL	0x100	/**< Argument to nc_set_fill() to turn off filling of data. */
+
+/* Define the ioflags bits for nc_create and nc_open.
+   currently unused:
+        0x0002
+	0x0040
+	0x0080
+   and the whole upper 16 bits
+*/
+
+#define NC_NOWRITE	 0x0000	/**< Set read-only access for nc_open(). */
+#define NC_WRITE    	 0x0001	/**< Set read-write access for nc_open(). */
+#define NC_CLOBBER	 0x0000 /**< Destroy existing file. Mode flag for nc_create(). */
+#define NC_NOCLOBBER     0x0004	/**< Don't destroy existing file. Mode flag for nc_create(). */
+
+#define NC_DISKLESS      0x0008  /**< Use diskless file. Mode flag for nc_open() or nc_create(). */
+#define NC_MMAP          0x0010  /**< Use diskless file with mmap. Mode flag for nc_open() or nc_create(). */
+
+#define NC_64BIT_DATA    0x0020  /**< CDF-5 format: classic model but 64 bit dimensions and sizes */
+#define NC_CDF5          NC_64BIT_DATA  /**< Alias NC_CDF5 to NC_64BIT_DATA */
+
+#define NC_CLASSIC_MODEL 0x0100 /**< Enforce classic model on netCDF-4. Mode flag for nc_create(). */
+#define NC_64BIT_OFFSET  0x0200  /**< Use large (64-bit) file offsets. Mode flag for nc_create(). */
+
+/** \deprecated The following flag currently is ignored, but use in
+ * nc_open() or nc_create() may someday support use of advisory
+ * locking to prevent multiple writers from clobbering a file
+ */
+#define NC_LOCK          0x0400
+
+/** Share updates, limit caching.
+Use this in mode flags for both nc_create() and nc_open(). */
+#define NC_SHARE         0x0800
+
+#define NC_NETCDF4       0x1000  /**< Use netCDF-4/HDF5 format. Mode flag for nc_create(). */
+
+/** Turn on MPI I/O.
+Use this in mode flags for both nc_create() and nc_open(). */
+#define NC_MPIIO         0x2000
+/** Turn on MPI POSIX I/O.
+Use this in mode flags for both nc_create() and nc_open(). */
+#define NC_MPIPOSIX      0x4000 /**< \deprecated As of libhdf5 1.8.13. */
+
+#define NC_INMEMORY      0x8000  /**< Read from memory. Mode flag for nc_open() or nc_create(). */
+
+#define NC_PNETCDF       (NC_MPIIO) /**< Use parallel-netcdf library; alias for NC_MPIIO. */
+
+/** Format specifier for nc_set_default_format() and returned
+ *  by nc_inq_format. This returns the format as provided by
+ *  the API. See nc_inq_format_extended to see the true file format.
+ *  Starting with version 3.6, there are different format netCDF files.
+ *  4.0 introduces the third one. \see netcdf_format
+ */
+/**@{*/
+#define NC_FORMAT_CLASSIC         (1)
+/* After adding CDF5 support, this flag
+   is somewhat confusing. So, it is renamed.
+   Note that the name in the contributed code
+   NC_FORMAT_64BIT was renamed to NC_FORMAT_CDF2
+*/
+#define NC_FORMAT_64BIT_OFFSET    (2)
+#define NC_FORMAT_64BIT           (NC_FORMAT_64BIT_OFFSET) /**< \deprecated Saved for compatibility.  Use NC_FORMAT_64BIT_OFFSET or NC_FORMAT_64BIT_DATA, from netCDF 4.4.0 onwards. */
+#define NC_FORMAT_NETCDF4         (3)
+#define NC_FORMAT_NETCDF4_CLASSIC (4)
+#define NC_FORMAT_64BIT_DATA      (5)
+
+/* Alias */
+#define NC_FORMAT_CDF5    NC_FORMAT_64BIT_DATA
+
+/**@}*/
+
+/** Extended format specifier returned by  nc_inq_format_extended()
+ *  Added in version 4.3.1. This returns the true format of the
+ *  underlying data.
+ * The function returns two values
+ * 1. a small integer indicating the underlying source type
+ *    of the data. Note that this may differ from what the user
+ *    sees from nc_inq_format() because this latter function
+ *    returns what the user can expect to see thru the API.
+ * 2. A mode value indicating what mode flags are effectively
+ *    set for this dataset. This usually will be a superset
+ *    of the mode flags used as the argument to nc_open
+ *    or nc_create.
+ * More or less, the #1 values track the set of dispatch tables.
+ * The #1 values are as follows.
+ * Note that CDF-5 returns NC_FORMAT_NC3, but sets the mode flag properly.
+ */
+/**@{*/
+
+#define NC_FORMATX_NC3       (1)
+#define NC_FORMATX_NC_HDF5   (2) /**< netCDF-4 subset of HDF5 */
+#define NC_FORMATX_NC4       NC_FORMATX_NC_HDF5 /**< alias */
+#define NC_FORMATX_NC_HDF4   (3) /**< netCDF-4 subset of HDF4 */
+#define NC_FORMATX_PNETCDF   (4)
+#define NC_FORMATX_DAP2      (5)
+#define NC_FORMATX_DAP4      (6)
+#define NC_FORMATX_UNDEFINED (0)
+
+  /* To avoid breaking compatibility (such as in the python library),
+   we need to retain the NC_FORMAT_xxx format as well. This may come
+  out eventually, as the NC_FORMATX is more clear that it's an extended
+  format specifier.*/
+
+#define NC_FORMAT_NC3       NC_FORMATX_NC3 /**< \deprecated As of 4.4.0, use NC_FORMATX_NC3 */
+#define NC_FORMAT_NC_HDF5   NC_FORMATX_NC_HDF5 /**< \deprecated As of 4.4.0, use NC_FORMATX_NC_HDF5 */
+#define NC_FORMAT_NC4       NC_FORMATX_NC4 /**< \deprecated As of 4.4.0, use NC_FORMATX_NC4 */
+#define NC_FORMAT_NC_HDF4   NC_FORMATX_NC_HDF4 /**< \deprecated As of 4.4.0, use NC_FORMATX_HDF4 */
+#define NC_FORMAT_PNETCDF   NC_FORMATX_PNETCDF /**< \deprecated As of 4.4.0, use NC_FORMATX_PNETCDF */
+#define NC_FORMAT_DAP2      NC_FORMATX_DAP2 /**< \deprecated As of 4.4.0, use NC_FORMATX_DAP2 */
+#define NC_FORMAT_DAP4      NC_FORMATX_DAP4 /**< \deprecated As of 4.4.0, use NC_FORMATX_DAP4 */
+#define NC_FORMAT_UNDEFINED NC_FORMATX_UNDEFINED /**< \deprecated As of 4.4.0, use NC_FORMATX_UNDEFINED */
+
+/**@}*/
+
+/** Let nc__create() or nc__open() figure out a suitable buffer size. */
+#define NC_SIZEHINT_DEFAULT 0
+
+/** In nc__enddef(), align to the buffer size. */
+#define NC_ALIGN_CHUNK ((size_t)(-1))
+
+/** Size argument to nc_def_dim() for an unlimited dimension. */
+#define NC_UNLIMITED 0L
+
+/** Attribute id to put/get a global attribute. */
+#define NC_GLOBAL -1
+
+/**
+Maximum for classic library.
+
+In the classic netCDF model there are maximum values for the number of
+dimensions in the file (\ref NC_MAX_DIMS), the number of global or per
+variable attributes (\ref NC_MAX_ATTRS), the number of variables in
+the file (\ref NC_MAX_VARS), and the length of a name (\ref
+NC_MAX_NAME).
+
+These maximums are enforced by the interface, to facilitate writing
+applications and utilities.  However, nothing is statically allocated
+to these sizes internally.
+
+These maximums are not used for netCDF-4/HDF5 files unless they were
+created with the ::NC_CLASSIC_MODEL flag.
+
+As a rule, NC_MAX_VAR_DIMS <= NC_MAX_DIMS.
+*/
+/**@{*/
+#define NC_MAX_DIMS	1024
+#define NC_MAX_ATTRS	8192
+#define NC_MAX_VARS	8192
+#define NC_MAX_NAME	256
+#define NC_MAX_VAR_DIMS	1024 /**< max per variable dimensions */
+/**@}*/
+
+/** This is the max size of an SD dataset name in HDF4 (from HDF4 documentation).*/
+#define NC_MAX_HDF4_NAME 64
+
+/** In HDF5 files you can set the endianness of variables with
+    nc_def_var_endian(). This define is used there. */
+/**@{*/
+#define NC_ENDIAN_NATIVE 0
+#define NC_ENDIAN_LITTLE 1
+#define NC_ENDIAN_BIG    2
+/**@}*/
+
+/** In HDF5 files you can set storage for each variable to be either
+ * contiguous or chunked, with nc_def_var_chunking().  This define is
+ * used there. */
+/**@{*/
+#define NC_CHUNKED    0
+#define NC_CONTIGUOUS 1
+/**@}*/
+
+/** In HDF5 files you can set check-summing for each variable.
+Currently the only checksum available is Fletcher-32, which can be set
+with the function nc_def_var_fletcher32.  These defines are used
+there. */
+/**@{*/
+#define NC_NOCHECKSUM 0
+#define NC_FLETCHER32 1
+/**@}*/
+
+/**@{*/
+/** Control the HDF5 shuffle filter. In HDF5 files you can specify
+ * that a shuffle filter should be used on each chunk of a variable to
+ * improve compression for that variable. This per-variable shuffle
+ * property can be set with the function nc_def_var_deflate(). */
+#define NC_NOSHUFFLE 0
+#define NC_SHUFFLE   1
+/**@}*/
+
+/** The netcdf version 3 functions all return integer error status.
+ * These are the possible values, in addition to certain values from
+ * the system errno.h.
+ */
+#define NC_ISSYSERR(err)	((err) > 0)
+
+#define	NC_NOERR	0   /**< No Error */
+#define NC2_ERR         (-1)       /**< Returned for all errors in the v2 API. */
+
+/** Not a netcdf id.
+
+The specified netCDF ID does not refer to an
+open netCDF dataset. */
+#define	NC_EBADID	(-33)
+#define	NC_ENFILE	(-34)	   /**< Too many netcdfs open */
+#define	NC_EEXIST	(-35)	   /**< netcdf file exists && NC_NOCLOBBER */
+#define	NC_EINVAL	(-36)	   /**< Invalid Argument */
+#define	NC_EPERM	(-37)	   /**< Write to read only */
+
+/** Operation not allowed in data mode. This is returned for netCDF
+classic or 64-bit offset files, or for netCDF-4 files, when they were
+been created with ::NC_CLASSIC_MODEL flag in nc_create(). */
+#define NC_ENOTINDEFINE	(-38)
+
+/** Operation not allowed in define mode.
+
+The specified netCDF is in define mode rather than data mode.
+
+With netCDF-4/HDF5 files, this error will not occur, unless
+::NC_CLASSIC_MODEL was used in nc_create().
+ */
+#define	NC_EINDEFINE	(-39)
+
+/** Index exceeds dimension bound.
+
+The specified corner indices were out of range for the rank of the
+specified variable. For example, a negative index or an index that is
+larger than the corresponding dimension length will cause an error. */
+#define	NC_EINVALCOORDS	(-40)
+
+/** NC_MAX_DIMS exceeded. Max number of dimensions exceeded in a
+classic or 64-bit offset file, or an netCDF-4 file with
+::NC_CLASSIC_MODEL on. */
+#define	NC_EMAXDIMS	(-41)
+
+#define	NC_ENAMEINUSE	(-42)	   /**< String match to name in use */
+#define NC_ENOTATT	(-43)	   /**< Attribute not found */
+#define	NC_EMAXATTS	(-44)	   /**< NC_MAX_ATTRS exceeded */
+#define NC_EBADTYPE	(-45)	   /**< Not a netcdf data type */
+#define NC_EBADDIM	(-46)	   /**< Invalid dimension id or name */
+#define NC_EUNLIMPOS	(-47)	   /**< NC_UNLIMITED in the wrong index */
+
+/** NC_MAX_VARS exceeded. Max number of variables exceeded in a
+classic or 64-bit offset file, or an netCDF-4 file with
+::NC_CLASSIC_MODEL on. */
+#define	NC_EMAXVARS	(-48)
+
+/** Variable not found.
+
+The variable ID is invalid for the specified netCDF dataset. */
+#define NC_ENOTVAR	(-49)
+#define NC_EGLOBAL	(-50)	   /**< Action prohibited on NC_GLOBAL varid */
+#define NC_ENOTNC	(-51)	   /**< Not a netcdf file */
+#define NC_ESTS        	(-52)	   /**< In Fortran, string too short */
+#define NC_EMAXNAME    	(-53)	   /**< NC_MAX_NAME exceeded */
+#define NC_EUNLIMIT    	(-54)	   /**< NC_UNLIMITED size already in use */
+#define NC_ENORECVARS  	(-55)	   /**< nc_rec op when there are no record vars */
+#define NC_ECHAR	(-56)	   /**< Attempt to convert between text & numbers */
+
+/** Start+count exceeds dimension bound.
+
+The specified edge lengths added to the specified corner would have
+referenced data out of range for the rank of the specified
+variable. For example, an edge length that is larger than the
+corresponding dimension length minus the corner index will cause an
+error. */
+#define NC_EEDGE	(-57)
+#define NC_ESTRIDE	(-58)	   /**< Illegal stride */
+#define NC_EBADNAME	(-59)	   /**< Attribute or variable name contains illegal characters */
+/* N.B. following must match value in ncx.h */
+
+/** Math result not representable.
+
+One or more of the values are out of the range of values representable
+by the desired type. */
+#define NC_ERANGE	(-60)
+#define NC_ENOMEM	(-61)	   /**< Memory allocation (malloc) failure */
+#define NC_EVARSIZE     (-62)      /**< One or more variable sizes violate format constraints */
+#define NC_EDIMSIZE     (-63)      /**< Invalid dimension size */
+#define NC_ETRUNC       (-64)      /**< File likely truncated or possibly corrupted */
+#define NC_EAXISTYPE    (-65)      /**< Unknown axis type. */
+
+/* Following errors are added for DAP */
+#define NC_EDAP         (-66)      /**< Generic DAP error */
+#define NC_ECURL        (-67)      /**< Generic libcurl error */
+#define NC_EIO          (-68)      /**< Generic IO error */
+#define NC_ENODATA      (-69)      /**< Attempt to access variable with no data */
+#define NC_EDAPSVC      (-70)      /**< DAP server error */
+#define NC_EDAS		(-71)      /**< Malformed or inaccessible DAS */
+#define NC_EDDS		(-72)      /**< Malformed or inaccessible DDS */
+#define NC_EDATADDS	(-73)      /**< Malformed or inaccessible DATADDS */
+#define NC_EDAPURL	(-74)      /**< Malformed DAP URL */
+#define NC_EDAPCONSTRAINT (-75)    /**< Malformed DAP Constraint*/
+#define NC_ETRANSLATION (-76)      /**< Untranslatable construct */
+#define NC_EACCESS      (-77)      /**< Access Failure */
+#define NC_EAUTH        (-78)      /**< Authorization Failure */
+
+/* Misc. additional errors */
+#define NC_ENOTFOUND     (-90)      /**< No such file */
+#define NC_ECANTREMOVE   (-91)      /**< Can't remove file */
+
+/* The following was added in support of netcdf-4. Make all netcdf-4
+   error codes < -100 so that errors can be added to netcdf-3 if
+   needed. */
+#define NC4_FIRST_ERROR  (-100)
+
+/** Error at HDF5 layer. */
+#define NC_EHDFERR       (-101)
+#define NC_ECANTREAD     (-102)    /**< Can't read. */
+#define NC_ECANTWRITE    (-103)    /**< Can't write. */
+#define NC_ECANTCREATE   (-104)    /**< Can't create. */
+#define NC_EFILEMETA     (-105)    /**< Problem with file metadata. */
+#define NC_EDIMMETA      (-106)    /**< Problem with dimension metadata. */
+#define NC_EATTMETA      (-107)    /**< Problem with attribute metadata. */
+#define NC_EVARMETA      (-108)    /**< Problem with variable metadata. */
+#define NC_ENOCOMPOUND   (-109)    /**< Not a compound type. */
+#define NC_EATTEXISTS    (-110)    /**< Attribute already exists. */
+#define NC_ENOTNC4       (-111)    /**< Attempting netcdf-4 operation on netcdf-3 file. */
+
+/** Attempting netcdf-4 operation on strict nc3 netcdf-4 file. */
+#define NC_ESTRICTNC3    (-112)
+#define NC_ENOTNC3       (-113)    /**< Attempting netcdf-3 operation on netcdf-4 file. */
+#define NC_ENOPAR        (-114)    /**< Parallel operation on file opened for non-parallel access. */
+#define NC_EPARINIT      (-115)    /**< Error initializing for parallel access. */
+#define NC_EBADGRPID     (-116)    /**< Bad group ID. */
+#define NC_EBADTYPID     (-117)    /**< Bad type ID. */
+#define NC_ETYPDEFINED   (-118)    /**< Type has already been defined and may not be edited. */
+#define NC_EBADFIELD     (-119)    /**< Bad field ID. */
+#define NC_EBADCLASS     (-120)    /**< Bad class. */
+#define NC_EMAPTYPE      (-121)    /**< Mapped access for atomic types only. */
+#define NC_ELATEFILL     (-122)    /**< Attempt to define fill value when data already exists. */
+#define NC_ELATEDEF      (-123)    /**< Attempt to define var properties, like deflate, after enddef. */
+#define NC_EDIMSCALE     (-124)    /**< Problem with HDF5 dimscales. */
+#define NC_ENOGRP        (-125)    /**< No group found. */
+#define NC_ESTORAGE      (-126)    /**< Can't specify both contiguous and chunking. */
+#define NC_EBADCHUNK     (-127)    /**< Bad chunksize. */
+#define NC_ENOTBUILT     (-128)    /**< Attempt to use feature that was not turned on when netCDF was built. */
+#define NC_EDISKLESS     (-129)    /**< Error in using diskless  access. */
+#define NC_ECANTEXTEND   (-130)    /**< Attempt to extend dataset during ind. I/O operation. */
+#define NC_EMPI          (-131)    /**< MPI operation failed. */
+
+#define NC4_LAST_ERROR   (-131)
+
+/* This is used in netCDF-4 files for dimensions without coordinate
+ * vars. */
+#define DIM_WITHOUT_VARIABLE "This is a netCDF dimension but not a netCDF variable."
+
+/* This is here at the request of the NCO team to support our
+ * mistake of having chunksizes be first ints, then size_t. Doh! */
+#define NC_HAVE_NEW_CHUNKING_API 1
+
+
+/*Errors for all remote access methods(e.g. DAP and CDMREMOTE)*/
+#define NC_EURL		(NC_EDAPURL)   /* Malformed URL */
+#define NC_ECONSTRAINT  (NC_EDAPCONSTRAINT)   /* Malformed Constraint*/
+
+
+/*
+ * The Interface
+ */
+
+/* Declaration modifiers for DLL support (MSC et al) */
+#if defined(DLL_NETCDF) /* define when library is a DLL */
+#  if defined(DLL_EXPORT) /* define when building the library */
+#   define MSC_EXTRA __declspec(dllexport)
+#  else
+#   define MSC_EXTRA __declspec(dllimport)
+#  endif
+#include <io.h>
+#else
+#define MSC_EXTRA
+#endif	/* defined(DLL_NETCDF) */
+
+# define EXTERNL MSC_EXTRA extern
+
+#if defined(DLL_NETCDF) /* define when library is a DLL */
+EXTERNL int ncerr;
+EXTERNL int ncopts;
+#endif
+
+EXTERNL const char *
+nc_inq_libvers(void);
+
+EXTERNL const char *
+nc_strerror(int ncerr);
+
+EXTERNL int
+nc__create(const char *path, int cmode, size_t initialsz,
+	 size_t *chunksizehintp, int *ncidp);
+
+EXTERNL int
+nc_create(const char *path, int cmode, int *ncidp);
+
+EXTERNL int
+nc__open(const char *path, int mode,
+	size_t *chunksizehintp, int *ncidp);
+
+EXTERNL int
+nc_open(const char *path, int mode, int *ncidp);
+
+/* Learn the path used to open/create the file. */
+EXTERNL int
+nc_inq_path(int ncid, size_t *pathlen, char *path);
+
+/* Given an ncid and group name (NULL gets root group), return
+ * locid. */
+EXTERNL int
+nc_inq_ncid(int ncid, const char *name, int *grp_ncid);
+
+/* Given a location id, return the number of groups it contains, and
+ * an array of their locids. */
+EXTERNL int
+nc_inq_grps(int ncid, int *numgrps, int *ncids);
+
+/* Given locid, find name of group. (Root group is named "/".) */
+EXTERNL int
+nc_inq_grpname(int ncid, char *name);
+
+/* Given ncid, find full name and len of full name. (Root group is
+ * named "/", with length 1.) */
+EXTERNL int
+nc_inq_grpname_full(int ncid, size_t *lenp, char *full_name);
+
+/* Given ncid, find len of full name. */
+EXTERNL int
+nc_inq_grpname_len(int ncid, size_t *lenp);
+
+/* Given an ncid, find the ncid of its parent group. */
+EXTERNL int
+nc_inq_grp_parent(int ncid, int *parent_ncid);
+
+/* Given a name and parent ncid, find group ncid. */
+EXTERNL int
+nc_inq_grp_ncid(int ncid, const char *grp_name, int *grp_ncid);
+
+/* Given a full name and ncid, find group ncid. */
+EXTERNL int
+nc_inq_grp_full_ncid(int ncid, const char *full_name, int *grp_ncid);
+
+/* Get a list of ids for all the variables in a group. */
+EXTERNL int
+nc_inq_varids(int ncid, int *nvars, int *varids);
+
+/* Find all dimids for a location. This finds all dimensions in a
+ * group, or any of its parents. */
+EXTERNL int
+nc_inq_dimids(int ncid, int *ndims, int *dimids, int include_parents);
+
+/* Find all user-defined types for a location. This finds all
+ * user-defined types in a group. */
+EXTERNL int
+nc_inq_typeids(int ncid, int *ntypes, int *typeids);
+
+/* Are two types equal? */
+EXTERNL int
+nc_inq_type_equal(int ncid1, nc_type typeid1, int ncid2,
+		  nc_type typeid2, int *equal);
+
+/* Create a group. its ncid is returned in the new_ncid pointer. */
+EXTERNL int
+nc_def_grp(int parent_ncid, const char *name, int *new_ncid);
+
+/* Rename a group */
+EXTERNL int
+nc_rename_grp(int grpid, const char *name);
+
+/* Here are functions for dealing with compound types. */
+
+/* Create a compound type. */
+EXTERNL int
+nc_def_compound(int ncid, size_t size, const char *name, nc_type *typeidp);
+
+/* Insert a named field into a compound type. */
+EXTERNL int
+nc_insert_compound(int ncid, nc_type xtype, const char *name,
+		   size_t offset, nc_type field_typeid);
+
+/* Insert a named array into a compound type. */
+EXTERNL int
+nc_insert_array_compound(int ncid, nc_type xtype, const char *name,
+			 size_t offset, nc_type field_typeid,
+			 int ndims, const int *dim_sizes);
+
+/* Get the name and size of a type. */
+EXTERNL int
+nc_inq_type(int ncid, nc_type xtype, char *name, size_t *size);
+
+/* Get the id of a type from the name. */
+EXTERNL int
+nc_inq_typeid(int ncid, const char *name, nc_type *typeidp);
+
+/* Get the name, size, and number of fields in a compound type. */
+EXTERNL int
+nc_inq_compound(int ncid, nc_type xtype, char *name, size_t *sizep,
+		size_t *nfieldsp);
+
+/* Get the name of a compound type. */
+EXTERNL int
+nc_inq_compound_name(int ncid, nc_type xtype, char *name);
+
+/* Get the size of a compound type. */
+EXTERNL int
+nc_inq_compound_size(int ncid, nc_type xtype, size_t *sizep);
+
+/* Get the number of fields in this compound type. */
+EXTERNL int
+nc_inq_compound_nfields(int ncid, nc_type xtype, size_t *nfieldsp);
+
+/* Given the xtype and the fieldid, get all info about it. */
+EXTERNL int
+nc_inq_compound_field(int ncid, nc_type xtype, int fieldid, char *name,
+		      size_t *offsetp, nc_type *field_typeidp, int *ndimsp,
+		      int *dim_sizesp);
+
+/* Given the typeid and the fieldid, get the name. */
+EXTERNL int
+nc_inq_compound_fieldname(int ncid, nc_type xtype, int fieldid,
+			  char *name);
+
+/* Given the xtype and the name, get the fieldid. */
+EXTERNL int
+nc_inq_compound_fieldindex(int ncid, nc_type xtype, const char *name,
+			   int *fieldidp);
+
+/* Given the xtype and fieldid, get the offset. */
+EXTERNL int
+nc_inq_compound_fieldoffset(int ncid, nc_type xtype, int fieldid,
+			    size_t *offsetp);
+
+/* Given the xtype and the fieldid, get the type of that field. */
+EXTERNL int
+nc_inq_compound_fieldtype(int ncid, nc_type xtype, int fieldid,
+			  nc_type *field_typeidp);
+
+/* Given the xtype and the fieldid, get the number of dimensions for
+ * that field (scalars are 0). */
+EXTERNL int
+nc_inq_compound_fieldndims(int ncid, nc_type xtype, int fieldid,
+			   int *ndimsp);
+
+/* Given the xtype and the fieldid, get the sizes of dimensions for
+ * that field. User must have allocated storage for the dim_sizes. */
+EXTERNL int
+nc_inq_compound_fielddim_sizes(int ncid, nc_type xtype, int fieldid,
+			       int *dim_sizes);
+
+/** This is the type of arrays of vlens. */
+typedef struct {
+    size_t len; /**< Length of VL data (in base type units) */
+    void *p;    /**< Pointer to VL data */
+} nc_vlen_t;
+
+/** Calculate an offset for creating a compound type. This calls a
+ * mysterious C macro which was found carved into one of the blocks of
+ * the Newgrange passage tomb in County Meath, Ireland. This code has
+ * been carbon dated to 3200 B.C.E. */
+#define NC_COMPOUND_OFFSET(S,M)    (offsetof(S,M))
+
+/* Create a variable length type. */
+EXTERNL int
+nc_def_vlen(int ncid, const char *name, nc_type base_typeid, nc_type *xtypep);
+
+/* Find out about a vlen. */
+EXTERNL int
+nc_inq_vlen(int ncid, nc_type xtype, char *name, size_t *datum_sizep,
+	    nc_type *base_nc_typep);
+
+/* When you read VLEN type the library will actually allocate the
+ * storage space for the data. This storage space must be freed, so
+ * pass the pointer back to this function, when you're done with the
+ * data, and it will free the vlen memory. */
+EXTERNL int
+nc_free_vlen(nc_vlen_t *vl);
+
+EXTERNL int
+nc_free_vlens(size_t len, nc_vlen_t vlens[]);
+
+/* Put or get one element in a vlen array. */
+EXTERNL int
+nc_put_vlen_element(int ncid, int typeid1, void *vlen_element,
+		    size_t len, const void *data);
+
+EXTERNL int
+nc_get_vlen_element(int ncid, int typeid1, const void *vlen_element,
+		    size_t *len, void *data);
+
+/* When you read the string type the library will allocate the storage
+ * space for the data. This storage space must be freed, so pass the
+ * pointer back to this function, when you're done with the data, and
+ * it will free the string memory. */
+EXTERNL int
+nc_free_string(size_t len, char **data);
+
+/* Find out about a user defined type. */
+EXTERNL int
+nc_inq_user_type(int ncid, nc_type xtype, char *name, size_t *size,
+		 nc_type *base_nc_typep, size_t *nfieldsp, int *classp);
+
+/* Write an attribute of any type. */
+EXTERNL int
+nc_put_att(int ncid, int varid, const char *name, nc_type xtype,
+	   size_t len, const void *op);
+
+/* Read an attribute of any type. */
+EXTERNL int
+nc_get_att(int ncid, int varid, const char *name, void *ip);
+
+/* Enum type. */
+
+/* Create an enum type. Provide a base type and a name. At the moment
+ * only ints are accepted as base types. */
+EXTERNL int
+nc_def_enum(int ncid, nc_type base_typeid, const char *name,
+	    nc_type *typeidp);
+
+/* Insert a named value into an enum type. The value must fit within
+ * the size of the enum type, the name size must be <= NC_MAX_NAME. */
+EXTERNL int
+nc_insert_enum(int ncid, nc_type xtype, const char *name,
+	       const void *value);
+
+/* Get information about an enum type: its name, base type and the
+ * number of members defined. */
+EXTERNL int
+nc_inq_enum(int ncid, nc_type xtype, char *name, nc_type *base_nc_typep,
+	    size_t *base_sizep, size_t *num_membersp);
+
+/* Get information about an enum member: a name and value. Name size
+ * will be <= NC_MAX_NAME. */
+EXTERNL int
+nc_inq_enum_member(int ncid, nc_type xtype, int idx, char *name,
+		   void *value);
+
+
+/* Get enum name from enum value. Name size will be <= NC_MAX_NAME. */
+EXTERNL int
+nc_inq_enum_ident(int ncid, nc_type xtype, long long value, char *identifier);
+
+/* Opaque type. */
+
+/* Create an opaque type. Provide a size and a name. */
+EXTERNL int
+nc_def_opaque(int ncid, size_t size, const char *name, nc_type *xtypep);
+
+/* Get information about an opaque type. */
+EXTERNL int
+nc_inq_opaque(int ncid, nc_type xtype, char *name, size_t *sizep);
+
+/* Write entire var of any type. */
+EXTERNL int
+nc_put_var(int ncid, int varid,  const void *op);
+
+/* Read entire var of any type. */
+EXTERNL int
+nc_get_var(int ncid, int varid,  void *ip);
+
+/* Write one value. */
+EXTERNL int
+nc_put_var1(int ncid, int varid,  const size_t *indexp,
+	    const void *op);
+
+/* Read one value. */
+EXTERNL int
+nc_get_var1(int ncid, int varid,  const size_t *indexp, void *ip);
+
+/* Write an array of values. */
+EXTERNL int
+nc_put_vara(int ncid, int varid,  const size_t *startp,
+	    const size_t *countp, const void *op);
+
+/* Read an array of values. */
+EXTERNL int
+nc_get_vara(int ncid, int varid,  const size_t *startp,
+	    const size_t *countp, void *ip);
+
+/* Write slices of an array of values. */
+EXTERNL int
+nc_put_vars(int ncid, int varid,  const size_t *startp,
+	    const size_t *countp, const ptrdiff_t *stridep,
+	    const void *op);
+
+/* Read slices of an array of values. */
+EXTERNL int
+nc_get_vars(int ncid, int varid,  const size_t *startp,
+	    const size_t *countp, const ptrdiff_t *stridep,
+	    void *ip);
+
+/* Write mapped slices of an array of values. */
+EXTERNL int
+nc_put_varm(int ncid, int varid,  const size_t *startp,
+	    const size_t *countp, const ptrdiff_t *stridep,
+	    const ptrdiff_t *imapp, const void *op);
+
+/* Read mapped slices of an array of values. */
+EXTERNL int
+nc_get_varm(int ncid, int varid,  const size_t *startp,
+	    const size_t *countp, const ptrdiff_t *stridep,
+	    const ptrdiff_t *imapp, void *ip);
+
+/* Extra netcdf-4 stuff. */
+
+/* Set compression settings for a variable. Lower is faster, higher is
+ * better. Must be called after nc_def_var and before nc_enddef. */
+EXTERNL int
+nc_def_var_deflate(int ncid, int varid, int shuffle, int deflate,
+		   int deflate_level);
+
+/* Find out compression settings of a var. */
+EXTERNL int
+nc_inq_var_deflate(int ncid, int varid, int *shufflep,
+		   int *deflatep, int *deflate_levelp);
+
+/* Find out szip settings of a var. */
+EXTERNL int
+nc_inq_var_szip(int ncid, int varid, int *options_maskp, int *pixels_per_blockp);
+
+/* Set fletcher32 checksum for a var. This must be done after nc_def_var
+   and before nc_enddef. */
+EXTERNL int
+nc_def_var_fletcher32(int ncid, int varid, int fletcher32);
+
+/* Inquire about fletcher32 checksum for a var. */
+EXTERNL int
+nc_inq_var_fletcher32(int ncid, int varid, int *fletcher32p);
+
+/* Define chunking for a variable. This must be done after nc_def_var
+   and before nc_enddef. */
+EXTERNL int
+nc_def_var_chunking(int ncid, int varid, int storage, const size_t *chunksizesp);
+
+/* Inq chunking stuff for a var. */
+EXTERNL int
+nc_inq_var_chunking(int ncid, int varid, int *storagep, size_t *chunksizesp);
+
+/* Define fill value behavior for a variable. This must be done after
+   nc_def_var and before nc_enddef. */
+EXTERNL int
+nc_def_var_fill(int ncid, int varid, int no_fill, const void *fill_value);
+
+/* Inq fill value setting for a var. */
+EXTERNL int
+nc_inq_var_fill(int ncid, int varid, int *no_fill, void *fill_valuep);
+
+/* Define the endianness of a variable. */
+EXTERNL int
+nc_def_var_endian(int ncid, int varid, int endian);
+
+/* Learn about the endianness of a variable. */
+EXTERNL int
+nc_inq_var_endian(int ncid, int varid, int *endianp);
+
+/* Set the fill mode (classic or 64-bit offset files only). */
+EXTERNL int
+nc_set_fill(int ncid, int fillmode, int *old_modep);
+
+/* Set the default nc_create format to NC_FORMAT_CLASSIC,
+ * NC_FORMAT_64BIT, NC_FORMAT_NETCDF4, etc */
+EXTERNL int
+nc_set_default_format(int format, int *old_formatp);
+
+/* Set the cache size, nelems, and preemption policy. */
+EXTERNL int
+nc_set_chunk_cache(size_t size, size_t nelems, float preemption);
+
+/* Get the cache size, nelems, and preemption policy. */
+EXTERNL int
+nc_get_chunk_cache(size_t *sizep, size_t *nelemsp, float *preemptionp);
+
+/* Set the per-variable cache size, nelems, and preemption policy. */
+EXTERNL int
+nc_set_var_chunk_cache(int ncid, int varid, size_t size, size_t nelems,
+		       float preemption);
+
+/* Get the per-variable cache size, nelems, and preemption policy. */
+EXTERNL int
+nc_get_var_chunk_cache(int ncid, int varid, size_t *sizep, size_t *nelemsp,
+		       float *preemptionp);
+
+EXTERNL int
+nc_redef(int ncid);
+
+/* Is this ever used? Convert to parameter form */
+EXTERNL int
+nc__enddef(int ncid, size_t h_minfree, size_t v_align,
+	size_t v_minfree, size_t r_align);
+
+EXTERNL int
+nc_enddef(int ncid);
+
+EXTERNL int
+nc_sync(int ncid);
+
+EXTERNL int
+nc_abort(int ncid);
+
+EXTERNL int
+nc_close(int ncid);
+
+EXTERNL int
+nc_inq(int ncid, int *ndimsp, int *nvarsp, int *nattsp, int *unlimdimidp);
+
+EXTERNL int
+nc_inq_ndims(int ncid, int *ndimsp);
+
+EXTERNL int
+nc_inq_nvars(int ncid, int *nvarsp);
+
+EXTERNL int
+nc_inq_natts(int ncid, int *nattsp);
+
+EXTERNL int
+nc_inq_unlimdim(int ncid, int *unlimdimidp);
+
+/* The next function is for NetCDF-4 only */
+EXTERNL int
+nc_inq_unlimdims(int ncid, int *nunlimdimsp, int *unlimdimidsp);
+
+/* Added in 3.6.1 to return format of netCDF file. */
+EXTERNL int
+nc_inq_format(int ncid, int *formatp);
+
+/* Added in 4.3.1 to return additional format info */
+EXTERNL int
+nc_inq_format_extended(int ncid, int *formatp, int* modep);
+
+/* Begin _dim */
+
+EXTERNL int
+nc_def_dim(int ncid, const char *name, size_t len, int *idp);
+
+EXTERNL int
+nc_inq_dimid(int ncid, const char *name, int *idp);
+
+EXTERNL int
+nc_inq_dim(int ncid, int dimid, char *name, size_t *lenp);
+
+EXTERNL int
+nc_inq_dimname(int ncid, int dimid, char *name);
+
+EXTERNL int
+nc_inq_dimlen(int ncid, int dimid, size_t *lenp);
+
+EXTERNL int
+nc_rename_dim(int ncid, int dimid, const char *name);
+
+/* End _dim */
+/* Begin _att */
+
+EXTERNL int
+nc_inq_att(int ncid, int varid, const char *name,
+	   nc_type *xtypep, size_t *lenp);
+
+EXTERNL int
+nc_inq_attid(int ncid, int varid, const char *name, int *idp);
+
+EXTERNL int
+nc_inq_atttype(int ncid, int varid, const char *name, nc_type *xtypep);
+
+EXTERNL int
+nc_inq_attlen(int ncid, int varid, const char *name, size_t *lenp);
+
+EXTERNL int
+nc_inq_attname(int ncid, int varid, int attnum, char *name);
+
+EXTERNL int
+nc_copy_att(int ncid_in, int varid_in, const char *name, int ncid_out, int varid_out);
+
+EXTERNL int
+nc_rename_att(int ncid, int varid, const char *name, const char *newname);
+
+EXTERNL int
+nc_del_att(int ncid, int varid, const char *name);
+
+/* End _att */
+/* Begin {put,get}_att */
+EXTERNL int
+nc_put_att_text(int ncid, int varid, const char *name,
+		size_t len, const char *op);
+
+EXTERNL int
+nc_get_att_text(int ncid, int varid, const char *name, char *ip);
+
+EXTERNL int
+nc_put_att_string(int ncid, int varid, const char *name,
+		  size_t len, const char **op);
+
+EXTERNL int
+nc_get_att_string(int ncid, int varid, const char *name, char **ip);
+
+EXTERNL int
+nc_put_att_uchar(int ncid, int varid, const char *name, nc_type xtype,
+		 size_t len, const unsigned char *op);
+
+EXTERNL int
+nc_get_att_uchar(int ncid, int varid, const char *name, unsigned char *ip);
+
+EXTERNL int
+nc_put_att_schar(int ncid, int varid, const char *name, nc_type xtype,
+		 size_t len, const signed char *op);
+
+EXTERNL int
+nc_get_att_schar(int ncid, int varid, const char *name, signed char *ip);
+
+EXTERNL int
+nc_put_att_short(int ncid, int varid, const char *name, nc_type xtype,
+		 size_t len, const short *op);
+
+EXTERNL int
+nc_get_att_short(int ncid, int varid, const char *name, short *ip);
+
+EXTERNL int
+nc_put_att_int(int ncid, int varid, const char *name, nc_type xtype,
+	       size_t len, const int *op);
+
+EXTERNL int
+nc_get_att_int(int ncid, int varid, const char *name, int *ip);
+
+EXTERNL int
+nc_put_att_long(int ncid, int varid, const char *name, nc_type xtype,
+		size_t len, const long *op);
+
+EXTERNL int
+nc_get_att_long(int ncid, int varid, const char *name, long *ip);
+
+EXTERNL int
+nc_put_att_float(int ncid, int varid, const char *name, nc_type xtype,
+		 size_t len, const float *op);
+
+EXTERNL int
+nc_get_att_float(int ncid, int varid, const char *name, float *ip);
+
+EXTERNL int
+nc_put_att_double(int ncid, int varid, const char *name, nc_type xtype,
+		  size_t len, const double *op);
+
+EXTERNL int
+nc_get_att_double(int ncid, int varid, const char *name, double *ip);
+
+EXTERNL int
+nc_put_att_ushort(int ncid, int varid, const char *name, nc_type xtype,
+		  size_t len, const unsigned short *op);
+
+EXTERNL int
+nc_get_att_ushort(int ncid, int varid, const char *name, unsigned short *ip);
+
+EXTERNL int
+nc_put_att_uint(int ncid, int varid, const char *name, nc_type xtype,
+		size_t len, const unsigned int *op);
+
+EXTERNL int
+nc_get_att_uint(int ncid, int varid, const char *name, unsigned int *ip);
+
+EXTERNL int
+nc_put_att_longlong(int ncid, int varid, const char *name, nc_type xtype,
+		 size_t len, const long long *op);
+
+EXTERNL int
+nc_get_att_longlong(int ncid, int varid, const char *name, long long *ip);
+
+EXTERNL int
+nc_put_att_ulonglong(int ncid, int varid, const char *name, nc_type xtype,
+		     size_t len, const unsigned long long *op);
+
+EXTERNL int
+nc_get_att_ulonglong(int ncid, int varid, const char *name,
+		     unsigned long long *ip);
+
+
+/* End {put,get}_att */
+/* Begin _var */
+
+EXTERNL int
+nc_def_var(int ncid, const char *name, nc_type xtype, int ndims,
+	   const int *dimidsp, int *varidp);
+
+EXTERNL int
+nc_inq_var(int ncid, int varid, char *name, nc_type *xtypep,
+	   int *ndimsp, int *dimidsp, int *nattsp);
+
+EXTERNL int
+nc_inq_varid(int ncid, const char *name, int *varidp);
+
+EXTERNL int
+nc_inq_varname(int ncid, int varid, char *name);
+
+EXTERNL int
+nc_inq_vartype(int ncid, int varid, nc_type *xtypep);
+
+EXTERNL int
+nc_inq_varndims(int ncid, int varid, int *ndimsp);
+
+EXTERNL int
+nc_inq_vardimid(int ncid, int varid, int *dimidsp);
+
+EXTERNL int
+nc_inq_varnatts(int ncid, int varid, int *nattsp);
+
+EXTERNL int
+nc_rename_var(int ncid, int varid, const char *name);
+
+EXTERNL int
+nc_copy_var(int ncid_in, int varid, int ncid_out);
+
+#ifndef ncvarcpy
+/* support the old name for now */
+#define ncvarcpy(ncid_in, varid, ncid_out) ncvarcopy((ncid_in), (varid), (ncid_out))
+#endif
+
+/* End _var */
+/* Begin {put,get}_var1 */
+
+EXTERNL int
+nc_put_var1_text(int ncid, int varid, const size_t *indexp, const char *op);
+
+EXTERNL int
+nc_get_var1_text(int ncid, int varid, const size_t *indexp, char *ip);
+
+EXTERNL int
+nc_put_var1_uchar(int ncid, int varid, const size_t *indexp,
+		  const unsigned char *op);
+
+EXTERNL int
+nc_get_var1_uchar(int ncid, int varid, const size_t *indexp,
+		  unsigned char *ip);
+
+EXTERNL int
+nc_put_var1_schar(int ncid, int varid, const size_t *indexp,
+		  const signed char *op);
+
+EXTERNL int
+nc_get_var1_schar(int ncid, int varid, const size_t *indexp,
+		  signed char *ip);
+
+EXTERNL int
+nc_put_var1_short(int ncid, int varid, const size_t *indexp,
+		  const short *op);
+
+EXTERNL int
+nc_get_var1_short(int ncid, int varid, const size_t *indexp,
+		  short *ip);
+
+EXTERNL int
+nc_put_var1_int(int ncid, int varid, const size_t *indexp, const int *op);
+
+EXTERNL int
+nc_get_var1_int(int ncid, int varid, const size_t *indexp, int *ip);
+
+EXTERNL int
+nc_put_var1_long(int ncid, int varid, const size_t *indexp, const long *op);
+
+EXTERNL int
+nc_get_var1_long(int ncid, int varid, const size_t *indexp, long *ip);
+
+EXTERNL int
+nc_put_var1_float(int ncid, int varid, const size_t *indexp, const float *op);
+
+EXTERNL int
+nc_get_var1_float(int ncid, int varid, const size_t *indexp, float *ip);
+
+EXTERNL int
+nc_put_var1_double(int ncid, int varid, const size_t *indexp, const double *op);
+
+EXTERNL int
+nc_get_var1_double(int ncid, int varid, const size_t *indexp, double *ip);
+
+EXTERNL int
+nc_put_var1_ushort(int ncid, int varid, const size_t *indexp,
+		   const unsigned short *op);
+
+EXTERNL int
+nc_get_var1_ushort(int ncid, int varid, const size_t *indexp,
+		   unsigned short *ip);
+
+EXTERNL int
+nc_put_var1_uint(int ncid, int varid, const size_t *indexp,
+		 const unsigned int *op);
+
+EXTERNL int
+nc_get_var1_uint(int ncid, int varid, const size_t *indexp,
+		 unsigned int *ip);
+
+EXTERNL int
+nc_put_var1_longlong(int ncid, int varid, const size_t *indexp,
+		     const long long *op);
+
+EXTERNL int
+nc_get_var1_longlong(int ncid, int varid, const size_t *indexp,
+		  long long *ip);
+
+EXTERNL int
+nc_put_var1_ulonglong(int ncid, int varid, const size_t *indexp,
+		   const unsigned long long *op);
+
+EXTERNL int
+nc_get_var1_ulonglong(int ncid, int varid, const size_t *indexp,
+		   unsigned long long *ip);
+
+EXTERNL int
+nc_put_var1_string(int ncid, int varid, const size_t *indexp,
+		   const char **op);
+
+EXTERNL int
+nc_get_var1_string(int ncid, int varid, const size_t *indexp,
+		   char **ip);
+
+/* End {put,get}_var1 */
+/* Begin {put,get}_vara */
+
+EXTERNL int
+nc_put_vara_text(int ncid, int varid, const size_t *startp,
+		 const size_t *countp, const char *op);
+
+EXTERNL int
+nc_get_vara_text(int ncid, int varid, const size_t *startp,
+		 const size_t *countp, char *ip);
+
+EXTERNL int
+nc_put_vara_uchar(int ncid, int varid, const size_t *startp,
+		  const size_t *countp, const unsigned char *op);
+
+EXTERNL int
+nc_get_vara_uchar(int ncid, int varid, const size_t *startp,
+		  const size_t *countp, unsigned char *ip);
+
+EXTERNL int
+nc_put_vara_schar(int ncid, int varid, const size_t *startp,
+		  const size_t *countp, const signed char *op);
+
+EXTERNL int
+nc_get_vara_schar(int ncid, int varid, const size_t *startp,
+		  const size_t *countp, signed char *ip);
+
+EXTERNL int
+nc_put_vara_short(int ncid, int varid, const size_t *startp,
+		  const size_t *countp, const short *op);
+
+EXTERNL int
+nc_get_vara_short(int ncid, int varid, const size_t *startp,
+		  const size_t *countp, short *ip);
+
+EXTERNL int
+nc_put_vara_int(int ncid, int varid, const size_t *startp,
+		const size_t *countp, const int *op);
+
+EXTERNL int
+nc_get_vara_int(int ncid, int varid, const size_t *startp,
+		const size_t *countp, int *ip);
+
+EXTERNL int
+nc_put_vara_long(int ncid, int varid, const size_t *startp,
+		 const size_t *countp, const long *op);
+
+EXTERNL int
+nc_get_vara_long(int ncid, int varid,
+	const size_t *startp, const size_t *countp, long *ip);
+
+EXTERNL int
+nc_put_vara_float(int ncid, int varid,
+	const size_t *startp, const size_t *countp, const float *op);
+
+EXTERNL int
+nc_get_vara_float(int ncid, int varid,
+	const size_t *startp, const size_t *countp, float *ip);
+
+EXTERNL int
+nc_put_vara_double(int ncid, int varid, const size_t *startp,
+		   const size_t *countp, const double *op);
+
+EXTERNL int
+nc_get_vara_double(int ncid, int varid, const size_t *startp,
+		   const size_t *countp, double *ip);
+
+EXTERNL int
+nc_put_vara_ushort(int ncid, int varid, const size_t *startp,
+		   const size_t *countp, const unsigned short *op);
+
+EXTERNL int
+nc_get_vara_ushort(int ncid, int varid, const size_t *startp,
+		   const size_t *countp, unsigned short *ip);
+
+EXTERNL int
+nc_put_vara_uint(int ncid, int varid, const size_t *startp,
+		 const size_t *countp, const unsigned int *op);
+
+EXTERNL int
+nc_get_vara_uint(int ncid, int varid, const size_t *startp,
+		 const size_t *countp, unsigned int *ip);
+
+EXTERNL int
+nc_put_vara_longlong(int ncid, int varid, const size_t *startp,
+		  const size_t *countp, const long long *op);
+
+EXTERNL int
+nc_get_vara_longlong(int ncid, int varid, const size_t *startp,
+		  const size_t *countp, long long *ip);
+
+EXTERNL int
+nc_put_vara_ulonglong(int ncid, int varid, const size_t *startp,
+		   const size_t *countp, const unsigned long long *op);
+
+EXTERNL int
+nc_get_vara_ulonglong(int ncid, int varid, const size_t *startp,
+		   const size_t *countp, unsigned long long *ip);
+
+EXTERNL int
+nc_put_vara_string(int ncid, int varid, const size_t *startp,
+		   const size_t *countp, const char **op);
+
+EXTERNL int
+nc_get_vara_string(int ncid, int varid, const size_t *startp,
+		   const size_t *countp, char **ip);
+
+/* End {put,get}_vara */
+/* Begin {put,get}_vars */
+
+EXTERNL int
+nc_put_vars_text(int ncid, int varid,
+	const size_t *startp, const size_t *countp, const ptrdiff_t *stridep,
+	const char *op);
+
+EXTERNL int
+nc_get_vars_text(int ncid, int varid,
+	const size_t *startp, const size_t *countp, const ptrdiff_t *stridep,
+	char *ip);
+
+EXTERNL int
+nc_put_vars_uchar(int ncid, int varid,
+	const size_t *startp, const size_t *countp, const ptrdiff_t *stridep,
+	const unsigned char *op);
+
+EXTERNL int
+nc_get_vars_uchar(int ncid, int varid,
+	const size_t *startp, const size_t *countp, const ptrdiff_t *stridep,
+	unsigned char *ip);
+
+EXTERNL int
+nc_put_vars_schar(int ncid, int varid,
+	const size_t *startp, const size_t *countp, const ptrdiff_t *stridep,
+	const signed char *op);
+
+EXTERNL int
+nc_get_vars_schar(int ncid, int varid,
+	const size_t *startp, const size_t *countp, const ptrdiff_t *stridep,
+	signed char *ip);
+
+EXTERNL int
+nc_put_vars_short(int ncid, int varid,
+	const size_t *startp, const size_t *countp, const ptrdiff_t *stridep,
+	const short *op);
+
+EXTERNL int
+nc_get_vars_short(int ncid, int varid, const size_t *startp,
+		  const size_t *countp, const ptrdiff_t *stridep,
+		  short *ip);
+
+EXTERNL int
+nc_put_vars_int(int ncid, int varid,
+	const size_t *startp, const size_t *countp, const ptrdiff_t *stridep,
+	const int *op);
+
+EXTERNL int
+nc_get_vars_int(int ncid, int varid,
+	const size_t *startp, const size_t *countp, const ptrdiff_t *stridep,
+	int *ip);
+
+EXTERNL int
+nc_put_vars_long(int ncid, int varid,
+	const size_t *startp, const size_t *countp, const ptrdiff_t *stridep,
+	const long *op);
+
+EXTERNL int
+nc_get_vars_long(int ncid, int varid,
+	const size_t *startp, const size_t *countp, const ptrdiff_t *stridep,
+	long *ip);
+
+EXTERNL int
+nc_put_vars_float(int ncid, int varid,
+	const size_t *startp, const size_t *countp, const ptrdiff_t *stridep,
+	const float *op);
+
+EXTERNL int
+nc_get_vars_float(int ncid, int varid,
+	const size_t *startp, const size_t *countp, const ptrdiff_t *stridep,
+	float *ip);
+
+EXTERNL int
+nc_put_vars_double(int ncid, int varid,
+	const size_t *startp, const size_t *countp, const ptrdiff_t *stridep,
+	const double *op);
+
+EXTERNL int
+nc_get_vars_double(int ncid, int varid,	const size_t *startp,
+		   const size_t *countp, const ptrdiff_t *stridep,
+		   double *ip);
+
+EXTERNL int
+nc_put_vars_ushort(int ncid, int varid, const size_t *startp,
+		   const size_t *countp, const ptrdiff_t *stridep,
+		   const unsigned short *op);
+
+EXTERNL int
+nc_get_vars_ushort(int ncid, int varid, const size_t *startp,
+		   const size_t *countp, const ptrdiff_t *stridep,
+		   unsigned short *ip);
+
+EXTERNL int
+nc_put_vars_uint(int ncid, int varid, const size_t *startp,
+		 const size_t *countp, const ptrdiff_t *stridep,
+		 const unsigned int *op);
+
+EXTERNL int
+nc_get_vars_uint(int ncid, int varid, const size_t *startp,
+		 const size_t *countp, const ptrdiff_t *stridep,
+		 unsigned int *ip);
+
+EXTERNL int
+nc_put_vars_longlong(int ncid, int varid, const size_t *startp,
+		  const size_t *countp, const ptrdiff_t *stridep,
+		  const long long *op);
+
+EXTERNL int
+nc_get_vars_longlong(int ncid, int varid, const size_t *startp,
+		  const size_t *countp, const ptrdiff_t *stridep,
+		  long long *ip);
+
+EXTERNL int
+nc_put_vars_ulonglong(int ncid, int varid, const size_t *startp,
+		   const size_t *countp, const ptrdiff_t *stridep,
+		   const unsigned long long *op);
+
+EXTERNL int
+nc_get_vars_ulonglong(int ncid, int varid, const size_t *startp,
+		   const size_t *countp, const ptrdiff_t *stridep,
+		   unsigned long long *ip);
+
+EXTERNL int
+nc_put_vars_string(int ncid, int varid, const size_t *startp,
+		   const size_t *countp, const ptrdiff_t *stridep,
+		   const char **op);
+
+EXTERNL int
+nc_get_vars_string(int ncid, int varid, const size_t *startp,
+		   const size_t *countp, const ptrdiff_t *stridep,
+		   char **ip);
+
+/* End {put,get}_vars */
+/* Begin {put,get}_varm */
+
+EXTERNL int
+nc_put_varm_text(int ncid, int varid, const size_t *startp,
+		 const size_t *countp, const ptrdiff_t *stridep,
+		 const ptrdiff_t *imapp, const char *op);
+
+EXTERNL int
+nc_get_varm_text(int ncid, int varid, const size_t *startp,
+		 const size_t *countp, const ptrdiff_t *stridep,
+		 const ptrdiff_t *imapp, char *ip);
+
+EXTERNL int
+nc_put_varm_uchar(int ncid, int varid, const size_t *startp,
+		  const size_t *countp, const ptrdiff_t *stridep,
+		  const ptrdiff_t *imapp, const unsigned char *op);
+
+EXTERNL int
+nc_get_varm_uchar(int ncid, int varid, const size_t *startp,
+		  const size_t *countp, const ptrdiff_t *stridep,
+		  const ptrdiff_t *imapp, unsigned char *ip);
+
+EXTERNL int
+nc_put_varm_schar(int ncid, int varid, const size_t *startp,
+		  const size_t *countp, const ptrdiff_t *stridep,
+		  const ptrdiff_t *imapp, const signed char *op);
+
+EXTERNL int
+nc_get_varm_schar(int ncid, int varid, const size_t *startp,
+		  const size_t *countp, const ptrdiff_t *stridep,
+		  const ptrdiff_t *imapp, signed char *ip);
+
+EXTERNL int
+nc_put_varm_short(int ncid, int varid, const size_t *startp,
+		  const size_t *countp, const ptrdiff_t *stridep,
+		  const ptrdiff_t *imapp, const short *op);
+
+EXTERNL int
+nc_get_varm_short(int ncid, int varid, const size_t *startp,
+		  const size_t *countp, const ptrdiff_t *stridep,
+		  const ptrdiff_t *imapp, short *ip);
+
+EXTERNL int
+nc_put_varm_int(int ncid, int varid, const size_t *startp,
+		const size_t *countp, const ptrdiff_t *stridep,
+		const ptrdiff_t *imapp, const int *op);
+
+EXTERNL int
+nc_get_varm_int(int ncid, int varid, const size_t *startp,
+		const size_t *countp, const ptrdiff_t *stridep,
+		const ptrdiff_t *imapp, int *ip);
+
+EXTERNL int
+nc_put_varm_long(int ncid, int varid, const size_t *startp,
+		 const size_t *countp, const ptrdiff_t *stridep,
+		 const ptrdiff_t *imapp, const long *op);
+
+EXTERNL int
+nc_get_varm_long(int ncid, int varid, const size_t *startp,
+		 const size_t *countp, const ptrdiff_t *stridep,
+		 const ptrdiff_t *imapp, long *ip);
+
+EXTERNL int
+nc_put_varm_float(int ncid, int varid,const size_t *startp,
+		  const size_t *countp, const ptrdiff_t *stridep,
+		  const ptrdiff_t *imapp, const float *op);
+
+EXTERNL int
+nc_get_varm_float(int ncid, int varid,const size_t *startp,
+		  const size_t *countp, const ptrdiff_t *stridep,
+		  const ptrdiff_t *imapp, float *ip);
+
+EXTERNL int
+nc_put_varm_double(int ncid, int varid,	const size_t *startp,
+		   const size_t *countp, const ptrdiff_t *stridep,
+		   const ptrdiff_t *imapp, const double *op);
+
+EXTERNL int
+nc_get_varm_double(int ncid, int varid,	const size_t *startp,
+		   const size_t *countp, const ptrdiff_t *stridep,
+		   const ptrdiff_t * imapp, double *ip);
+
+EXTERNL int
+nc_put_varm_ushort(int ncid, int varid, const size_t *startp,
+		   const size_t *countp, const ptrdiff_t *stridep,
+		   const ptrdiff_t * imapp, const unsigned short *op);
+
+EXTERNL int
+nc_get_varm_ushort(int ncid, int varid, const size_t *startp,
+		   const size_t *countp, const ptrdiff_t *stridep,
+		   const ptrdiff_t * imapp, unsigned short *ip);
+
+EXTERNL int
+nc_put_varm_uint(int ncid, int varid, const size_t *startp,
+		 const size_t *countp, const ptrdiff_t *stridep,
+		 const ptrdiff_t * imapp, const unsigned int *op);
+
+EXTERNL int
+nc_get_varm_uint(int ncid, int varid, const size_t *startp,
+		 const size_t *countp, const ptrdiff_t *stridep,
+		 const ptrdiff_t * imapp, unsigned int *ip);
+
+EXTERNL int
+nc_put_varm_longlong(int ncid, int varid, const size_t *startp,
+		  const size_t *countp, const ptrdiff_t *stridep,
+		  const ptrdiff_t * imapp, const long long *op);
+
+EXTERNL int
+nc_get_varm_longlong(int ncid, int varid, const size_t *startp,
+		  const size_t *countp, const ptrdiff_t *stridep,
+		  const ptrdiff_t * imapp, long long *ip);
+
+EXTERNL int
+nc_put_varm_ulonglong(int ncid, int varid, const size_t *startp,
+		   const size_t *countp, const ptrdiff_t *stridep,
+		   const ptrdiff_t * imapp, const unsigned long long *op);
+
+EXTERNL int
+nc_get_varm_ulonglong(int ncid, int varid, const size_t *startp,
+		   const size_t *countp, const ptrdiff_t *stridep,
+		   const ptrdiff_t * imapp, unsigned long long *ip);
+
+EXTERNL int
+nc_put_varm_string(int ncid, int varid, const size_t *startp,
+		   const size_t *countp, const ptrdiff_t *stridep,
+		   const ptrdiff_t * imapp, const char **op);
+
+EXTERNL int
+nc_get_varm_string(int ncid, int varid, const size_t *startp,
+		   const size_t *countp, const ptrdiff_t *stridep,
+		   const ptrdiff_t * imapp, char **ip);
+
+/* End {put,get}_varm */
+/* Begin {put,get}_var */
+
+EXTERNL int
+nc_put_var_text(int ncid, int varid, const char *op);
+
+EXTERNL int
+nc_get_var_text(int ncid, int varid, char *ip);
+
+EXTERNL int
+nc_put_var_uchar(int ncid, int varid, const unsigned char *op);
+
+EXTERNL int
+nc_get_var_uchar(int ncid, int varid, unsigned char *ip);
+
+EXTERNL int
+nc_put_var_schar(int ncid, int varid, const signed char *op);
+
+EXTERNL int
+nc_get_var_schar(int ncid, int varid, signed char *ip);
+
+EXTERNL int
+nc_put_var_short(int ncid, int varid, const short *op);
+
+EXTERNL int
+nc_get_var_short(int ncid, int varid, short *ip);
+
+EXTERNL int
+nc_put_var_int(int ncid, int varid, const int *op);
+
+EXTERNL int
+nc_get_var_int(int ncid, int varid, int *ip);
+
+EXTERNL int
+nc_put_var_long(int ncid, int varid, const long *op);
+
+EXTERNL int
+nc_get_var_long(int ncid, int varid, long *ip);
+
+EXTERNL int
+nc_put_var_float(int ncid, int varid, const float *op);
+
+EXTERNL int
+nc_get_var_float(int ncid, int varid, float *ip);
+
+EXTERNL int
+nc_put_var_double(int ncid, int varid, const double *op);
+
+EXTERNL int
+nc_get_var_double(int ncid, int varid, double *ip);
+
+EXTERNL int
+nc_put_var_ushort(int ncid, int varid, const unsigned short *op);
+
+EXTERNL int
+nc_get_var_ushort(int ncid, int varid, unsigned short *ip);
+
+EXTERNL int
+nc_put_var_uint(int ncid, int varid, const unsigned int *op);
+
+EXTERNL int
+nc_get_var_uint(int ncid, int varid, unsigned int *ip);
+
+EXTERNL int
+nc_put_var_longlong(int ncid, int varid, const long long *op);
+
+EXTERNL int
+nc_get_var_longlong(int ncid, int varid, long long *ip);
+
+EXTERNL int
+nc_put_var_ulonglong(int ncid, int varid, const unsigned long long *op);
+
+EXTERNL int
+nc_get_var_ulonglong(int ncid, int varid, unsigned long long *ip);
+
+EXTERNL int
+nc_put_var_string(int ncid, int varid, const char **op);
+
+EXTERNL int
+nc_get_var_string(int ncid, int varid, char **ip);
+
+/* Begin Deprecated, same as functions with "_ubyte" replaced by "_uchar" */
+EXTERNL int
+nc_put_att_ubyte(int ncid, int varid, const char *name, nc_type xtype,
+		 size_t len, const unsigned char *op);
+EXTERNL int
+nc_get_att_ubyte(int ncid, int varid, const char *name,
+		 unsigned char *ip);
+EXTERNL int
+nc_put_var1_ubyte(int ncid, int varid, const size_t *indexp,
+		  const unsigned char *op);
+EXTERNL int
+nc_get_var1_ubyte(int ncid, int varid, const size_t *indexp,
+		  unsigned char *ip);
+EXTERNL int
+nc_put_vara_ubyte(int ncid, int varid, const size_t *startp,
+		  const size_t *countp, const unsigned char *op);
+EXTERNL int
+nc_get_vara_ubyte(int ncid, int varid, const size_t *startp,
+		  const size_t *countp, unsigned char *ip);
+EXTERNL int
+nc_put_vars_ubyte(int ncid, int varid, const size_t *startp,
+		  const size_t *countp, const ptrdiff_t *stridep,
+		  const unsigned char *op);
+EXTERNL int
+nc_get_vars_ubyte(int ncid, int varid, const size_t *startp,
+		  const size_t *countp, const ptrdiff_t *stridep,
+		  unsigned char *ip);
+EXTERNL int
+nc_put_varm_ubyte(int ncid, int varid, const size_t *startp,
+		  const size_t *countp, const ptrdiff_t *stridep,
+		  const ptrdiff_t * imapp, const unsigned char *op);
+EXTERNL int
+nc_get_varm_ubyte(int ncid, int varid, const size_t *startp,
+		  const size_t *countp, const ptrdiff_t *stridep,
+		  const ptrdiff_t * imapp, unsigned char *ip);
+EXTERNL int
+nc_put_var_ubyte(int ncid, int varid, const unsigned char *op);
+EXTERNL int
+nc_get_var_ubyte(int ncid, int varid, unsigned char *ip);
+/* End Deprecated */
+
+#ifdef LOGGING
+
+/* Set the log level. 0 shows only errors, 1 only major messages,
+ * etc., to 5, which shows way too much information. */
+EXTERNL int
+nc_set_log_level(int new_level);
+
+/* Use this to turn off logging by calling
+   nc_log_level(NC_TURN_OFF_LOGGING) */
+#define NC_TURN_OFF_LOGGING (-1)
+
+#else /* not LOGGING */
+
+#define nc_set_log_level(e)
+
+#endif /* LOGGING */
+
+/* Show the netCDF library's in-memory metadata for a file. */
+EXTERNL int
+nc_show_metadata(int ncid);
+
+/* End {put,get}_var */
+
+/* #ifdef _CRAYMPP */
+/*
+ * Public interfaces to better support
+ * CRAY multi-processor systems like T3E.
+ * A tip of the hat to NERSC.
+ */
+/*
+ * It turns out we need to declare and define
+ * these public interfaces on all platforms
+ * or things get ugly working out the
+ * FORTRAN interface. On !_CRAYMPP platforms,
+ * these functions work as advertised, but you
+ * can only use "processor element" 0.
+ */
+
+EXTERNL int
+nc__create_mp(const char *path, int cmode, size_t initialsz, int basepe,
+	 size_t *chunksizehintp, int *ncidp);
+
+EXTERNL int
+nc__open_mp(const char *path, int mode, int basepe,
+	size_t *chunksizehintp, int *ncidp);
+
+EXTERNL int
+nc_delete(const char *path);
+
+EXTERNL int
+nc_delete_mp(const char *path, int basepe);
+
+EXTERNL int
+nc_set_base_pe(int ncid, int pe);
+
+EXTERNL int
+nc_inq_base_pe(int ncid, int *pe);
+
+/* #endif _CRAYMPP */
+
+/* This v2 function is used in the nc_test program. */
+EXTERNL int
+nctypelen(nc_type datatype);
+
+/* Begin v2.4 backward compatibility */
+/*
+ * defining NO_NETCDF_2 to the preprocessor
+ * turns off backward compatibility declarations.
+ */
+#ifndef NO_NETCDF_2
+
+/** Backward compatible alias. */
+/**@{*/
+#define FILL_BYTE	NC_FILL_BYTE
+#define FILL_CHAR	NC_FILL_CHAR
+#define FILL_SHORT	NC_FILL_SHORT
+#define FILL_LONG	NC_FILL_INT
+#define FILL_FLOAT	NC_FILL_FLOAT
+#define FILL_DOUBLE	NC_FILL_DOUBLE
+
+#define MAX_NC_DIMS	NC_MAX_DIMS
+#define MAX_NC_ATTRS	NC_MAX_ATTRS
+#define MAX_NC_VARS	NC_MAX_VARS
+#define MAX_NC_NAME	NC_MAX_NAME
+#define MAX_VAR_DIMS	NC_MAX_VAR_DIMS
+/**@}*/
+
+
+/*
+ * Global error status
+ */
+EXTERNL int ncerr;
+
+#define NC_ENTOOL       NC_EMAXNAME   /* Backward compatibility */
+#define	NC_EXDR		(-32)	/* */
+#define	NC_SYSERR	(-31)
+
+/*
+ * Global options variable.
+ * Used to determine behavior of error handler.
+ */
+#define	NC_FATAL	1
+#define	NC_VERBOSE	2
+
+EXTERNL int ncopts;	/* default is (NC_FATAL | NC_VERBOSE) */
+
+EXTERNL void
+nc_advise(const char *cdf_routine_name, int err, const char *fmt,...);
+
+/*
+ * C data type corresponding to a netCDF NC_LONG argument,
+ * a signed 32 bit object.
+ *
+ * This is the only thing in this file which architecture dependent.
+ */
+typedef int nclong;
+
+EXTERNL int
+nccreate(const char* path, int cmode);
+
+EXTERNL int
+ncopen(const char* path, int mode);
+
+EXTERNL int
+ncsetfill(int ncid, int fillmode);
+
+EXTERNL int
+ncredef(int ncid);
+
+EXTERNL int
+ncendef(int ncid);
+
+EXTERNL int
+ncsync(int ncid);
+
+EXTERNL int
+ncabort(int ncid);
+
+EXTERNL int
+ncclose(int ncid);
+
+EXTERNL int
+ncinquire(int ncid, int *ndimsp, int *nvarsp, int *nattsp, int *unlimdimp);
+
+EXTERNL int
+ncdimdef(int ncid, const char *name, long len);
+
+EXTERNL int
+ncdimid(int ncid, const char *name);
+
+EXTERNL int
+ncdiminq(int ncid, int dimid, char *name, long *lenp);
+
+EXTERNL int
+ncdimrename(int ncid, int dimid, const char *name);
+
+EXTERNL int
+ncattput(int ncid, int varid, const char *name, nc_type xtype,
+	int len, const void *op);
+
+EXTERNL int
+ncattinq(int ncid, int varid, const char *name, nc_type *xtypep, int *lenp);
+
+EXTERNL int
+ncattget(int ncid, int varid, const char *name, void *ip);
+
+EXTERNL int
+ncattcopy(int ncid_in, int varid_in, const char *name, int ncid_out,
+	int varid_out);
+
+EXTERNL int
+ncattname(int ncid, int varid, int attnum, char *name);
+
+EXTERNL int
+ncattrename(int ncid, int varid, const char *name, const char *newname);
+
+EXTERNL int
+ncattdel(int ncid, int varid, const char *name);
+
+EXTERNL int
+ncvardef(int ncid, const char *name, nc_type xtype,
+	int ndims, const int *dimidsp);
+
+EXTERNL int
+ncvarid(int ncid, const char *name);
+
+EXTERNL int
+ncvarinq(int ncid, int varid, char *name, nc_type *xtypep,
+	int *ndimsp, int *dimidsp, int *nattsp);
+
+EXTERNL int
+ncvarput1(int ncid, int varid, const long *indexp, const void *op);
+
+EXTERNL int
+ncvarget1(int ncid, int varid, const long *indexp, void *ip);
+
+EXTERNL int
+ncvarput(int ncid, int varid, const long *startp, const long *countp,
+	const void *op);
+
+EXTERNL int
+ncvarget(int ncid, int varid, const long *startp, const long *countp,
+	void *ip);
+
+EXTERNL int
+ncvarputs(int ncid, int varid, const long *startp, const long *countp,
+	const long *stridep, const void *op);
+
+EXTERNL int
+ncvargets(int ncid, int varid, const long *startp, const long *countp,
+	const long *stridep, void *ip);
+
+EXTERNL int
+ncvarputg(int ncid, int varid, const long *startp, const long *countp,
+	const long *stridep, const long *imapp, const void *op);
+
+EXTERNL int
+ncvargetg(int ncid, int varid, const long *startp, const long *countp,
+	const long *stridep, const long *imapp, void *ip);
+
+EXTERNL int
+ncvarrename(int ncid, int varid, const char *name);
+
+EXTERNL int
+ncrecinq(int ncid, int *nrecvarsp, int *recvaridsp, long *recsizesp);
+
+EXTERNL int
+ncrecget(int ncid, long recnum, void **datap);
+
+EXTERNL int
+ncrecput(int ncid, long recnum, void *const *datap);
+
+/* EXTERNL int nc_finalize(); */
+
+/* End v2.4 backward compatibility */
+#endif /*!NO_NETCDF_2*/
+
+#if defined(__cplusplus)
+}
+#endif
+
+/* Temporary hack to shut up warnings */
+#ifndef __MINGW32_VERSION
+#define END_OF_MAIN()
+#endif
+
+/* Define two hard-coded functionality-related
+   macros, but this is not going to be
+   standard practice. */
+#ifndef NC_HAVE_RENAME_GRP
+#define NC_HAVE_RENAME_GRP /*!< rename_grp() support. */
+#endif
+
+#ifndef NC_HAVE_INQ_FORMAT_EXTENDED
+#define NC_HAVE_INQ_FORMAT_EXTENDED /*!< inq_format_extended() support. */
+#endif
+
+#define NC_HAVE_META_H
+
+#endif /* _NETCDF_ */
diff --git a/privatemodules/nc4/include/netcdf.inc b/privatemodules/nc4/include/netcdf.inc
new file mode 100644
index 0000000000000000000000000000000000000000..1371bcb52d841c5e815043e2637b74296ad1c059
--- /dev/null
+++ b/privatemodules/nc4/include/netcdf.inc
@@ -0,0 +1,1740 @@
+!     NetCDF-3.
+!
+! netcdf version 3 fortran interface:
+!
+
+!
+! external netcdf data types:
+!
+      integer nf_byte
+      integer nf_int1
+      integer nf_char
+      integer nf_short
+      integer nf_int2
+      integer nf_int
+      integer nf_float
+      integer nf_real
+      integer nf_double
+
+      parameter (nf_byte = 1)
+      parameter (nf_int1 = nf_byte)
+      parameter (nf_char = 2)
+      parameter (nf_short = 3)
+      parameter (nf_int2 = nf_short)
+      parameter (nf_int = 4)
+      parameter (nf_float = 5)
+      parameter (nf_real = nf_float)
+      parameter (nf_double = 6)
+
+!
+! default fill values:
+!
+      integer           nf_fill_byte
+      integer           nf_fill_int1
+      integer           nf_fill_char
+      integer           nf_fill_short
+      integer           nf_fill_int2
+      integer           nf_fill_int
+      real              nf_fill_float
+      real              nf_fill_real
+      doubleprecision   nf_fill_double
+
+      parameter (nf_fill_byte = -127)
+      parameter (nf_fill_int1 = nf_fill_byte)
+      parameter (nf_fill_char = 0)
+      parameter (nf_fill_short = -32767)
+      parameter (nf_fill_int2 = nf_fill_short)
+      parameter (nf_fill_int = -2147483647)
+      parameter (nf_fill_float = 9.9692099683868690e+36)
+      parameter (nf_fill_real = nf_fill_float)
+      parameter (nf_fill_double = 9.9692099683868690d+36)
+
+!
+! mode flags for opening and creating a netcdf dataset:
+!
+      integer nf_nowrite
+      integer nf_write
+      integer nf_clobber
+      integer nf_noclobber
+      integer nf_fill
+      integer nf_nofill
+      integer nf_lock
+      integer nf_share
+      integer nf_64bit_offset
+      integer nf_sizehint_default
+      integer nf_align_chunk
+      integer nf_format_classic
+      integer nf_format_64bit
+      integer nf_diskless
+      integer nf_mmap
+
+      parameter (nf_nowrite = 0)
+      parameter (nf_write = 1)
+      parameter (nf_clobber = 0)
+      parameter (nf_noclobber = 4)
+      parameter (nf_fill = 0)
+      parameter (nf_nofill = 256)
+      parameter (nf_lock = 1024)
+      parameter (nf_share = 2048)
+      parameter (nf_64bit_offset = 512)
+      parameter (nf_sizehint_default = 0)
+      parameter (nf_align_chunk = -1)
+      parameter (nf_format_classic = 1)
+      parameter (nf_format_64bit = 2)
+      parameter (nf_diskless = 8)
+      parameter (nf_mmap = 16)
+
+!
+! size argument for defining an unlimited dimension:
+!
+      integer nf_unlimited
+      parameter (nf_unlimited = 0)
+
+!
+! global attribute id:
+!
+      integer nf_global
+      parameter (nf_global = 0)
+
+!
+! implementation limits:
+!
+      integer nf_max_dims
+      integer nf_max_attrs
+      integer nf_max_vars
+      integer nf_max_name
+      integer nf_max_var_dims
+
+      parameter (nf_max_dims = 1024)
+      parameter (nf_max_attrs = 8192)
+      parameter (nf_max_vars = 8192)
+      parameter (nf_max_name = 256)
+      parameter (nf_max_var_dims = nf_max_dims)
+
+!
+! error codes:
+!
+      integer nf_noerr
+      integer nf_ebadid
+      integer nf_eexist
+      integer nf_einval
+      integer nf_eperm
+      integer nf_enotindefine
+      integer nf_eindefine
+      integer nf_einvalcoords
+      integer nf_emaxdims
+      integer nf_enameinuse
+      integer nf_enotatt
+      integer nf_emaxatts
+      integer nf_ebadtype
+      integer nf_ebaddim
+      integer nf_eunlimpos
+      integer nf_emaxvars
+      integer nf_enotvar
+      integer nf_eglobal
+      integer nf_enotnc
+      integer nf_ests
+      integer nf_emaxname
+      integer nf_eunlimit
+      integer nf_enorecvars
+      integer nf_echar
+      integer nf_eedge
+      integer nf_estride
+      integer nf_ebadname
+      integer nf_erange
+      integer nf_enomem
+      integer nf_evarsize
+      integer nf_edimsize
+      integer nf_etrunc
+
+      parameter (nf_noerr = 0)
+      parameter (nf_ebadid = -33)
+      parameter (nf_eexist = -35)
+      parameter (nf_einval = -36)
+      parameter (nf_eperm = -37)
+      parameter (nf_enotindefine = -38)
+      parameter (nf_eindefine = -39)
+      parameter (nf_einvalcoords = -40)
+      parameter (nf_emaxdims = -41)
+      parameter (nf_enameinuse = -42)
+      parameter (nf_enotatt = -43)
+      parameter (nf_emaxatts = -44)
+      parameter (nf_ebadtype = -45)
+      parameter (nf_ebaddim = -46)
+      parameter (nf_eunlimpos = -47)
+      parameter (nf_emaxvars = -48)
+      parameter (nf_enotvar = -49)
+      parameter (nf_eglobal = -50)
+      parameter (nf_enotnc = -51)
+      parameter (nf_ests = -52)
+      parameter (nf_emaxname = -53)
+      parameter (nf_eunlimit = -54)
+      parameter (nf_enorecvars = -55)
+      parameter (nf_echar = -56)
+      parameter (nf_eedge = -57)
+      parameter (nf_estride = -58)
+      parameter (nf_ebadname = -59)
+      parameter (nf_erange = -60)
+      parameter (nf_enomem = -61)
+      parameter (nf_evarsize = -62)
+      parameter (nf_edimsize = -63)
+      parameter (nf_etrunc = -64)
+!
+! error handling modes:
+!
+      integer  nf_fatal
+      integer nf_verbose
+
+      parameter (nf_fatal = 1)
+      parameter (nf_verbose = 2)
+
+!
+! miscellaneous routines:
+!
+      character*80   nf_inq_libvers
+      external       nf_inq_libvers
+
+      character*80   nf_strerror
+!                         (integer             ncerr)
+      external       nf_strerror
+
+      logical        nf_issyserr
+!                         (integer             ncerr)
+      external       nf_issyserr
+
+!
+! control routines:
+!
+      integer         nf_inq_base_pe
+!                         (integer             ncid,
+!                          integer             pe)
+      external        nf_inq_base_pe
+
+      integer         nf_set_base_pe
+!                         (integer             ncid,
+!                          integer             pe)
+      external        nf_set_base_pe
+
+      integer         nf_create
+!                         (character*(*)       path,
+!                          integer             cmode,
+!                          integer             ncid)
+      external        nf_create
+
+      integer         nf__create
+!                         (character*(*)       path,
+!                          integer             cmode,
+!                          integer             initialsz,
+!                          integer             chunksizehint,
+!                          integer             ncid)
+      external        nf__create
+
+      integer         nf__create_mp
+!                         (character*(*)       path,
+!                          integer             cmode,
+!                          integer             initialsz,
+!                          integer             basepe,
+!                          integer             chunksizehint,
+!                          integer             ncid)
+      external        nf__create_mp
+
+      integer         nf_open
+!                         (character*(*)       path,
+!                          integer             mode,
+!                          integer             ncid)
+      external        nf_open
+
+      integer         nf__open
+!                         (character*(*)       path,
+!                          integer             mode,
+!                          integer             chunksizehint,
+!                          integer             ncid)
+      external        nf__open
+
+      integer         nf__open_mp
+!                         (character*(*)       path,
+!                          integer             mode,
+!                          integer             basepe,
+!                          integer             chunksizehint,
+!                          integer             ncid)
+      external        nf__open_mp
+
+      integer         nf_set_fill
+!                         (integer             ncid,
+!                          integer             fillmode,
+!                          integer             old_mode)
+      external        nf_set_fill
+
+      integer         nf_set_default_format
+!                          (integer             format,
+!                          integer             old_format)
+      external        nf_set_default_format
+
+      integer         nf_redef
+!                         (integer             ncid)
+      external        nf_redef
+
+      integer         nf_enddef
+!                         (integer             ncid)
+      external        nf_enddef
+
+      integer         nf__enddef
+!                         (integer             ncid,
+!                          integer             h_minfree,
+!                          integer             v_align,
+!                          integer             v_minfree,
+!                          integer             r_align)
+      external        nf__enddef
+
+      integer         nf_sync
+!                         (integer             ncid)
+      external        nf_sync
+
+      integer         nf_abort
+!                         (integer             ncid)
+      external        nf_abort
+
+      integer         nf_close
+!                         (integer             ncid)
+      external        nf_close
+
+      integer         nf_delete
+!                         (character*(*)       ncid)
+      external        nf_delete
+
+!
+! general inquiry routines:
+!
+
+      integer         nf_inq
+!                         (integer             ncid,
+!                          integer             ndims,
+!                          integer             nvars,
+!                          integer             ngatts,
+!                          integer             unlimdimid)
+      external        nf_inq
+
+! new inquire path
+
+      integer nf_inq_path
+      external nf_inq_path
+
+      integer         nf_inq_ndims
+!                         (integer             ncid,
+!                          integer             ndims)
+      external        nf_inq_ndims
+
+      integer         nf_inq_nvars
+!                         (integer             ncid,
+!                          integer             nvars)
+      external        nf_inq_nvars
+
+      integer         nf_inq_natts
+!                         (integer             ncid,
+!                          integer             ngatts)
+      external        nf_inq_natts
+
+      integer         nf_inq_unlimdim
+!                         (integer             ncid,
+!                          integer             unlimdimid)
+      external        nf_inq_unlimdim
+
+      integer         nf_inq_format
+!                         (integer             ncid,
+!                          integer             format)
+      external        nf_inq_format
+
+!
+! dimension routines:
+!
+
+      integer         nf_def_dim
+!                         (integer             ncid,
+!                          character(*)        name,
+!                          integer             len,
+!                          integer             dimid)
+      external        nf_def_dim
+
+      integer         nf_inq_dimid
+!                         (integer             ncid,
+!                          character(*)        name,
+!                          integer             dimid)
+      external        nf_inq_dimid
+
+      integer         nf_inq_dim
+!                         (integer             ncid,
+!                          integer             dimid,
+!                          character(*)        name,
+!                          integer             len)
+      external        nf_inq_dim
+
+      integer         nf_inq_dimname
+!                         (integer             ncid,
+!                          integer             dimid,
+!                          character(*)        name)
+      external        nf_inq_dimname
+
+      integer         nf_inq_dimlen
+!                         (integer             ncid,
+!                          integer             dimid,
+!                          integer             len)
+      external        nf_inq_dimlen
+
+      integer         nf_rename_dim
+!                         (integer             ncid,
+!                          integer             dimid,
+!                          character(*)        name)
+      external        nf_rename_dim
+
+!
+! general attribute routines:
+!
+
+      integer         nf_inq_att
+!                         (integer             ncid,
+!                          integer             varid,
+!                          character(*)        name,
+!                          integer             xtype,
+!                          integer             len)
+      external        nf_inq_att
+
+      integer         nf_inq_attid
+!                         (integer             ncid,
+!                          integer             varid,
+!                          character(*)        name,
+!                          integer             attnum)
+      external        nf_inq_attid
+
+      integer         nf_inq_atttype
+!                         (integer             ncid,
+!                          integer             varid,
+!                          character(*)        name,
+!                          integer             xtype)
+      external        nf_inq_atttype
+
+      integer         nf_inq_attlen
+!                         (integer             ncid,
+!                          integer             varid,
+!                          character(*)        name,
+!                          integer             len)
+      external        nf_inq_attlen
+
+      integer         nf_inq_attname
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             attnum,
+!                          character(*)        name)
+      external        nf_inq_attname
+
+      integer         nf_copy_att
+!                         (integer             ncid_in,
+!                          integer             varid_in,
+!                          character(*)        name,
+!                          integer             ncid_out,
+!                          integer             varid_out)
+      external        nf_copy_att
+
+      integer         nf_rename_att
+!                         (integer             ncid,
+!                          integer             varid,
+!                          character(*)        curname,
+!                          character(*)        newname)
+      external        nf_rename_att
+
+      integer         nf_del_att
+!                         (integer             ncid,
+!                          integer             varid,
+!                          character(*)        name)
+      external        nf_del_att
+
+!
+! attribute put/get routines:
+!
+
+      integer         nf_put_att_text
+!                         (integer             ncid,
+!                          integer             varid,
+!                          character(*)        name,
+!                          integer             len,
+!                          character(*)        text)
+      external        nf_put_att_text
+
+      integer         nf_get_att_text
+!                         (integer             ncid,
+!                          integer             varid,
+!                          character(*)        name,
+!                          character(*)        text)
+      external        nf_get_att_text
+
+      integer         nf_put_att_int1
+!                         (integer             ncid,
+!                          integer             varid,
+!                          character(*)        name,
+!                          integer             xtype,
+!                          integer             len,
+!                          nf_int1_t           i1vals(1))
+      external        nf_put_att_int1
+
+      integer         nf_get_att_int1
+!                         (integer             ncid,
+!                          integer             varid,
+!                          character(*)        name,
+!                          nf_int1_t           i1vals(1))
+      external        nf_get_att_int1
+
+      integer         nf_put_att_int2
+!                         (integer             ncid,
+!                          integer             varid,
+!                          character(*)        name,
+!                          integer             xtype,
+!                          integer             len,
+!                          nf_int2_t           i2vals(1))
+      external        nf_put_att_int2
+
+      integer         nf_get_att_int2
+!                         (integer             ncid,
+!                          integer             varid,
+!                          character(*)        name,
+!                          nf_int2_t           i2vals(1))
+      external        nf_get_att_int2
+
+      integer         nf_put_att_int
+!                         (integer             ncid,
+!                          integer             varid,
+!                          character(*)        name,
+!                          integer             xtype,
+!                          integer             len,
+!                          integer             ivals(1))
+      external        nf_put_att_int
+
+      integer         nf_get_att_int
+!                         (integer             ncid,
+!                          integer             varid,
+!                          character(*)        name,
+!                          integer             ivals(1))
+      external        nf_get_att_int
+
+      integer         nf_put_att_real
+!                         (integer             ncid,
+!                          integer             varid,
+!                          character(*)        name,
+!                          integer             xtype,
+!                          integer             len,
+!                          real                rvals(1))
+      external        nf_put_att_real
+
+      integer         nf_get_att_real
+!                         (integer             ncid,
+!                          integer             varid,
+!                          character(*)        name,
+!                          real                rvals(1))
+      external        nf_get_att_real
+
+      integer         nf_put_att_double
+!                         (integer             ncid,
+!                          integer             varid,
+!                          character(*)        name,
+!                          integer             xtype,
+!                          integer             len,
+!                          double              dvals(1))
+      external        nf_put_att_double
+
+      integer         nf_get_att_double
+!                         (integer             ncid,
+!                          integer             varid,
+!                          character(*)        name,
+!                          double              dvals(1))
+      external        nf_get_att_double
+
+!
+! general variable routines:
+!
+
+      integer         nf_def_var
+!                         (integer             ncid,
+!                          character(*)        name,
+!                          integer             datatype,
+!                          integer             ndims,
+!                          integer             dimids(1),
+!                          integer             varid)
+      external        nf_def_var
+
+      integer         nf_inq_var
+!                         (integer             ncid,
+!                          integer             varid,
+!                          character(*)        name,
+!                          integer             datatype,
+!                          integer             ndims,
+!                          integer             dimids(1),
+!                          integer             natts)
+      external        nf_inq_var
+
+      integer         nf_inq_varid
+!                         (integer             ncid,
+!                          character(*)        name,
+!                          integer             varid)
+      external        nf_inq_varid
+
+      integer         nf_inq_varname
+!                         (integer             ncid,
+!                          integer             varid,
+!                          character(*)        name)
+      external        nf_inq_varname
+
+      integer         nf_inq_vartype
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             xtype)
+      external        nf_inq_vartype
+
+      integer         nf_inq_varndims
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             ndims)
+      external        nf_inq_varndims
+
+      integer         nf_inq_vardimid
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             dimids(1))
+      external        nf_inq_vardimid
+
+      integer         nf_inq_varnatts
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             natts)
+      external        nf_inq_varnatts
+
+      integer         nf_rename_var
+!                         (integer             ncid,
+!                          integer             varid,
+!                          character(*)        name)
+      external        nf_rename_var
+
+      integer         nf_copy_var
+!                         (integer             ncid_in,
+!                          integer             varid,
+!                          integer             ncid_out)
+      external        nf_copy_var
+
+!
+! entire variable put/get routines:
+!
+
+      integer         nf_put_var_text
+!                         (integer             ncid,
+!                          integer             varid,
+!                          character(*)        text)
+      external        nf_put_var_text
+
+      integer         nf_get_var_text
+!                         (integer             ncid,
+!                          integer             varid,
+!                          character(*)        text)
+      external        nf_get_var_text
+
+      integer         nf_put_var_int1
+!                         (integer             ncid,
+!                          integer             varid,
+!                          nf_int1_t           i1vals(1))
+      external        nf_put_var_int1
+
+      integer         nf_get_var_int1
+!                         (integer             ncid,
+!                          integer             varid,
+!                          nf_int1_t           i1vals(1))
+      external        nf_get_var_int1
+
+      integer         nf_put_var_int2
+!                         (integer             ncid,
+!                          integer             varid,
+!                          nf_int2_t           i2vals(1))
+      external        nf_put_var_int2
+
+      integer         nf_get_var_int2
+!                         (integer             ncid,
+!                          integer             varid,
+!                          nf_int2_t           i2vals(1))
+      external        nf_get_var_int2
+
+      integer         nf_put_var_int
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             ivals(1))
+      external        nf_put_var_int
+
+      integer         nf_get_var_int
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             ivals(1))
+      external        nf_get_var_int
+
+      integer         nf_put_var_real
+!                         (integer             ncid,
+!                          integer             varid,
+!                          real                rvals(1))
+      external        nf_put_var_real
+
+      integer         nf_get_var_real
+!                         (integer             ncid,
+!                          integer             varid,
+!                          real                rvals(1))
+      external        nf_get_var_real
+
+      integer         nf_put_var_double
+!                         (integer             ncid,
+!                          integer             varid,
+!                          doubleprecision     dvals(1))
+      external        nf_put_var_double
+
+      integer         nf_get_var_double
+!                         (integer             ncid,
+!                          integer             varid,
+!                          doubleprecision     dvals(1))
+      external        nf_get_var_double
+
+!
+! single variable put/get routines:
+!
+
+      integer         nf_put_var1_text
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             index(1),
+!                          character*1         text)
+      external        nf_put_var1_text
+
+      integer         nf_get_var1_text
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             index(1),
+!                          character*1         text)
+      external        nf_get_var1_text
+
+      integer         nf_put_var1_int1
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             index(1),
+!                          nf_int1_t           i1val)
+      external        nf_put_var1_int1
+
+      integer         nf_get_var1_int1
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             index(1),
+!                          nf_int1_t           i1val)
+      external        nf_get_var1_int1
+
+      integer         nf_put_var1_int2
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             index(1),
+!                          nf_int2_t           i2val)
+      external        nf_put_var1_int2
+
+      integer         nf_get_var1_int2
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             index(1),
+!                          nf_int2_t           i2val)
+      external        nf_get_var1_int2
+
+      integer         nf_put_var1_int
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             index(1),
+!                          integer             ival)
+      external        nf_put_var1_int
+
+      integer         nf_get_var1_int
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             index(1),
+!                          integer             ival)
+      external        nf_get_var1_int
+
+      integer         nf_put_var1_real
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             index(1),
+!                          real                rval)
+      external        nf_put_var1_real
+
+      integer         nf_get_var1_real
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             index(1),
+!                          real                rval)
+      external        nf_get_var1_real
+
+      integer         nf_put_var1_double
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             index(1),
+!                          doubleprecision     dval)
+      external        nf_put_var1_double
+
+      integer         nf_get_var1_double
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             index(1),
+!                          doubleprecision     dval)
+      external        nf_get_var1_double
+
+!
+! variable array put/get routines:
+!
+
+      integer         nf_put_vara_text
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          character(*)        text)
+      external        nf_put_vara_text
+
+      integer         nf_get_vara_text
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          character(*)        text)
+      external        nf_get_vara_text
+
+      integer         nf_put_vara_int1
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          nf_int1_t           i1vals(1))
+      external        nf_put_vara_int1
+
+      integer         nf_get_vara_int1
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          nf_int1_t           i1vals(1))
+      external        nf_get_vara_int1
+
+      integer         nf_put_vara_int2
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          nf_int2_t           i2vals(1))
+      external        nf_put_vara_int2
+
+      integer         nf_get_vara_int2
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          nf_int2_t           i2vals(1))
+      external        nf_get_vara_int2
+
+      integer         nf_put_vara_int
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          integer             ivals(1))
+      external        nf_put_vara_int
+
+      integer         nf_get_vara_int
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          integer             ivals(1))
+      external        nf_get_vara_int
+
+      integer         nf_put_vara_real
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          real                rvals(1))
+      external        nf_put_vara_real
+
+      integer         nf_get_vara_real
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          real                rvals(1))
+      external        nf_get_vara_real
+
+      integer         nf_put_vara_double
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          doubleprecision     dvals(1))
+      external        nf_put_vara_double
+
+      integer         nf_get_vara_double
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          doubleprecision     dvals(1))
+      external        nf_get_vara_double
+
+!
+! strided variable put/get routines:
+!
+
+      integer         nf_put_vars_text
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          integer             stride(1),
+!                          character(*)        text)
+      external        nf_put_vars_text
+
+      integer         nf_get_vars_text
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          integer             stride(1),
+!                          character(*)        text)
+      external        nf_get_vars_text
+
+      integer         nf_put_vars_int1
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          integer             stride(1),
+!                          nf_int1_t           i1vals(1))
+      external        nf_put_vars_int1
+
+      integer         nf_get_vars_int1
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          integer             stride(1),
+!                          nf_int1_t           i1vals(1))
+      external        nf_get_vars_int1
+
+      integer         nf_put_vars_int2
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          integer             stride(1),
+!                          nf_int2_t           i2vals(1))
+      external        nf_put_vars_int2
+
+      integer         nf_get_vars_int2
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          integer             stride(1),
+!                          nf_int2_t           i2vals(1))
+      external        nf_get_vars_int2
+
+      integer         nf_put_vars_int
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          integer             stride(1),
+!                          integer             ivals(1))
+      external        nf_put_vars_int
+
+      integer         nf_get_vars_int
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          integer             stride(1),
+!                          integer             ivals(1))
+      external        nf_get_vars_int
+
+      integer         nf_put_vars_real
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          integer             stride(1),
+!                          real                rvals(1))
+      external        nf_put_vars_real
+
+      integer         nf_get_vars_real
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          integer             stride(1),
+!                          real                rvals(1))
+      external        nf_get_vars_real
+
+      integer         nf_put_vars_double
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          integer             stride(1),
+!                          doubleprecision     dvals(1))
+      external        nf_put_vars_double
+
+      integer         nf_get_vars_double
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          integer             stride(1),
+!                          doubleprecision     dvals(1))
+      external        nf_get_vars_double
+
+!
+! mapped variable put/get routines:
+!
+
+      integer         nf_put_varm_text
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          integer             stride(1),
+!                          integer             imap(1),
+!                          character(*)        text)
+      external        nf_put_varm_text
+
+      integer         nf_get_varm_text
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          integer             stride(1),
+!                          integer             imap(1),
+!                          character(*)        text)
+      external        nf_get_varm_text
+
+      integer         nf_put_varm_int1
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          integer             stride(1),
+!                          integer             imap(1),
+!                          nf_int1_t           i1vals(1))
+      external        nf_put_varm_int1
+
+      integer         nf_get_varm_int1
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          integer             stride(1),
+!                          integer             imap(1),
+!                          nf_int1_t           i1vals(1))
+      external        nf_get_varm_int1
+
+      integer         nf_put_varm_int2
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          integer             stride(1),
+!                          integer             imap(1),
+!                          nf_int2_t           i2vals(1))
+      external        nf_put_varm_int2
+
+      integer         nf_get_varm_int2
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          integer             stride(1),
+!                          integer             imap(1),
+!                          nf_int2_t           i2vals(1))
+      external        nf_get_varm_int2
+
+      integer         nf_put_varm_int
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          integer             stride(1),
+!                          integer             imap(1),
+!                          integer             ivals(1))
+      external        nf_put_varm_int
+
+      integer         nf_get_varm_int
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          integer             stride(1),
+!                          integer             imap(1),
+!                          integer             ivals(1))
+      external        nf_get_varm_int
+
+      integer         nf_put_varm_real
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          integer             stride(1),
+!                          integer             imap(1),
+!                          real                rvals(1))
+      external        nf_put_varm_real
+
+      integer         nf_get_varm_real
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          integer             stride(1),
+!                          integer             imap(1),
+!                          real                rvals(1))
+      external        nf_get_varm_real
+
+      integer         nf_put_varm_double
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          integer             stride(1),
+!                          integer             imap(1),
+!                          doubleprecision     dvals(1))
+      external        nf_put_varm_double
+
+      integer         nf_get_varm_double
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          integer             stride(1),
+!                          integer             imap(1),
+!                          doubleprecision     dvals(1))
+      external        nf_get_varm_double
+
+
+!     NetCDF-4.
+!     This is part of netCDF-4. Copyright 2006, UCAR, See COPYRIGHT
+!     file for distribution information.
+
+!     Netcdf version 4 fortran interface.
+
+!     $Id: netcdf4.inc,v 1.28 2010/05/25 13:53:02 ed Exp $
+
+!     New netCDF-4 types.
+      integer nf_ubyte
+      integer nf_ushort
+      integer nf_uint
+      integer nf_int64
+      integer nf_uint64
+      integer nf_string
+      integer nf_vlen
+      integer nf_opaque
+      integer nf_enum
+      integer nf_compound
+
+      parameter (nf_ubyte = 7)
+      parameter (nf_ushort = 8)
+      parameter (nf_uint = 9)
+      parameter (nf_int64 = 10)
+      parameter (nf_uint64 = 11)
+      parameter (nf_string = 12)
+      parameter (nf_vlen = 13)
+      parameter (nf_opaque = 14)
+      parameter (nf_enum = 15)
+      parameter (nf_compound = 16)
+
+!     New netCDF-4 fill values.
+      integer           nf_fill_ubyte
+      integer           nf_fill_ushort
+!      real              nf_fill_uint
+!      real              nf_fill_int64
+!      real              nf_fill_uint64
+      parameter (nf_fill_ubyte = 255)
+      parameter (nf_fill_ushort = 65535)
+
+!     New constants.
+      integer nf_format_netcdf4
+      parameter (nf_format_netcdf4 = 3)
+
+      integer nf_format_netcdf4_classic
+      parameter (nf_format_netcdf4_classic = 4)
+
+      integer nf_netcdf4
+      parameter (nf_netcdf4 = 4096)
+
+      integer nf_classic_model
+      parameter (nf_classic_model = 256)
+
+      integer nf_chunk_seq
+      parameter (nf_chunk_seq = 0)
+      integer nf_chunk_sub
+      parameter (nf_chunk_sub = 1)
+      integer nf_chunk_sizes
+      parameter (nf_chunk_sizes = 2)
+
+      integer nf_endian_native
+      parameter (nf_endian_native = 0)
+      integer nf_endian_little
+      parameter (nf_endian_little = 1)
+      integer nf_endian_big
+      parameter (nf_endian_big = 2)
+
+!     For NF_DEF_VAR_CHUNKING
+      integer nf_chunked
+      parameter (nf_chunked = 0)
+      integer nf_contiguous
+      parameter (nf_contiguous = 1)
+
+!     For NF_DEF_VAR_FLETCHER32
+      integer nf_nochecksum
+      parameter (nf_nochecksum = 0)
+      integer nf_fletcher32
+      parameter (nf_fletcher32 = 1)
+
+!     For NF_DEF_VAR_DEFLATE
+      integer nf_noshuffle
+      parameter (nf_noshuffle = 0)
+      integer nf_shuffle
+      parameter (nf_shuffle = 1)
+
+!     For NF_DEF_VAR_SZIP
+      integer nf_szip_ec_option_mask
+      parameter (nf_szip_ec_option_mask = 4)
+      integer nf_szip_nn_option_mask
+      parameter (nf_szip_nn_option_mask = 32)
+
+!     For parallel I/O.
+      integer nf_mpiio      
+      parameter (nf_mpiio = 8192)
+      integer nf_mpiposix
+      parameter (nf_mpiposix = 16384)
+      integer nf_pnetcdf
+      parameter (nf_pnetcdf = 32768)
+
+!     For NF_VAR_PAR_ACCESS.
+      integer nf_independent
+      parameter (nf_independent = 0)
+      integer nf_collective
+      parameter (nf_collective = 1)
+
+!     New error codes.
+      integer nf_ehdferr        ! Error at HDF5 layer. 
+      parameter (nf_ehdferr = -101)
+      integer nf_ecantread      ! Can't read. 
+      parameter (nf_ecantread = -102)
+      integer nf_ecantwrite     ! Can't write. 
+      parameter (nf_ecantwrite = -103)
+      integer nf_ecantcreate    ! Can't create. 
+      parameter (nf_ecantcreate = -104)
+      integer nf_efilemeta      ! Problem with file metadata. 
+      parameter (nf_efilemeta = -105)
+      integer nf_edimmeta       ! Problem with dimension metadata. 
+      parameter (nf_edimmeta = -106)
+      integer nf_eattmeta       ! Problem with attribute metadata. 
+      parameter (nf_eattmeta = -107)
+      integer nf_evarmeta       ! Problem with variable metadata. 
+      parameter (nf_evarmeta = -108)
+      integer nf_enocompound    ! Not a compound type. 
+      parameter (nf_enocompound = -109)
+      integer nf_eattexists     ! Attribute already exists. 
+      parameter (nf_eattexists = -110)
+      integer nf_enotnc4        ! Attempting netcdf-4 operation on netcdf-3 file.   
+      parameter (nf_enotnc4 = -111)
+      integer nf_estrictnc3     ! Attempting netcdf-4 operation on strict nc3 netcdf-4 file.   
+      parameter (nf_estrictnc3 = -112)
+      integer nf_enotnc3        ! Attempting netcdf-3 operation on netcdf-4 file.   
+      parameter (nf_enotnc3 = -113)
+      integer nf_enopar         ! Parallel operation on file opened for non-parallel access.   
+      parameter (nf_enopar = -114)
+      integer nf_eparinit       ! Error initializing for parallel access.   
+      parameter (nf_eparinit = -115)
+      integer nf_ebadgrpid      ! Bad group ID.   
+      parameter (nf_ebadgrpid = -116)
+      integer nf_ebadtypid      ! Bad type ID.   
+      parameter (nf_ebadtypid = -117)
+      integer nf_etypdefined    ! Type has already been defined and may not be edited. 
+      parameter (nf_etypdefined = -118)
+      integer nf_ebadfield      ! Bad field ID.   
+      parameter (nf_ebadfield = -119)
+      integer nf_ebadclass      ! Bad class.   
+      parameter (nf_ebadclass = -120)
+      integer nf_emaptype       ! Mapped access for atomic types only.   
+      parameter (nf_emaptype = -121)
+      integer nf_elatefill      ! Attempt to define fill value when data already exists. 
+      parameter (nf_elatefill = -122)
+      integer nf_elatedef       ! Attempt to define var properties, like deflate, after enddef. 
+      parameter (nf_elatedef = -123)
+      integer nf_edimscale      ! Probem with HDF5 dimscales. 
+      parameter (nf_edimscale = -124)
+      integer nf_enogrp       ! No group found.
+      parameter (nf_enogrp = -125)
+
+
+!     New functions.
+
+!     Parallel I/O.
+      integer nf_create_par
+      external nf_create_par
+
+      integer nf_open_par
+      external nf_open_par
+
+      integer nf_var_par_access
+      external nf_var_par_access
+
+!     Functions to handle groups.
+      integer nf_inq_ncid
+      external nf_inq_ncid
+
+      integer nf_inq_grps
+      external nf_inq_grps
+
+      integer nf_inq_grpname
+      external nf_inq_grpname
+
+      integer nf_inq_grpname_full
+      external nf_inq_grpname_full
+
+      integer nf_inq_grpname_len
+      external nf_inq_grpname_len
+
+      integer nf_inq_grp_parent
+      external nf_inq_grp_parent
+
+      integer nf_inq_grp_ncid
+      external nf_inq_grp_ncid
+
+      integer nf_inq_grp_full_ncid
+      external nf_inq_grp_full_ncid
+
+      integer nf_inq_varids
+      external nf_inq_varids
+
+      integer nf_inq_dimids
+      external nf_inq_dimids
+
+      integer nf_def_grp
+      external nf_def_grp
+
+!     New rename grp function
+
+      integer nf_rename_grp
+      external nf_rename_grp
+
+!     New options for netCDF variables.
+      integer nf_def_var_deflate
+      external nf_def_var_deflate
+
+      integer nf_inq_var_deflate
+      external nf_inq_var_deflate
+
+      integer nf_def_var_fletcher32
+      external nf_def_var_fletcher32
+
+      integer nf_inq_var_fletcher32
+      external nf_inq_var_fletcher32
+
+      integer nf_def_var_chunking
+      external nf_def_var_chunking
+
+      integer nf_inq_var_chunking
+      external nf_inq_var_chunking
+
+      integer nf_def_var_fill
+      external nf_def_var_fill
+
+      integer nf_inq_var_fill
+      external nf_inq_var_fill
+
+      integer nf_def_var_endian
+      external nf_def_var_endian
+
+      integer nf_inq_var_endian
+      external nf_inq_var_endian
+
+!     User defined types.
+      integer nf_inq_typeids
+      external nf_inq_typeids
+
+      integer nf_inq_typeid
+      external nf_inq_typeid
+
+      integer nf_inq_type
+      external nf_inq_type
+
+      integer nf_inq_user_type
+      external nf_inq_user_type
+
+!     User defined types - compound types.
+      integer nf_def_compound
+      external nf_def_compound
+
+      integer nf_insert_compound
+      external nf_insert_compound
+
+      integer nf_insert_array_compound
+      external nf_insert_array_compound
+
+      integer nf_inq_compound
+      external nf_inq_compound
+
+      integer nf_inq_compound_name
+      external nf_inq_compound_name
+
+      integer nf_inq_compound_size
+      external nf_inq_compound_size
+
+      integer nf_inq_compound_nfields
+      external nf_inq_compound_nfields
+
+      integer nf_inq_compound_field
+      external nf_inq_compound_field
+
+      integer nf_inq_compound_fieldname
+      external nf_inq_compound_fieldname
+
+      integer nf_inq_compound_fieldindex
+      external nf_inq_compound_fieldindex
+
+      integer nf_inq_compound_fieldoffset
+      external nf_inq_compound_fieldoffset
+
+      integer nf_inq_compound_fieldtype
+      external nf_inq_compound_fieldtype
+
+      integer nf_inq_compound_fieldndims
+      external nf_inq_compound_fieldndims
+
+      integer nf_inq_compound_fielddim_sizes
+      external nf_inq_compound_fielddim_sizes
+
+!     User defined types - variable length arrays.
+      integer nf_def_vlen
+      external nf_def_vlen
+
+      integer nf_inq_vlen
+      external nf_inq_vlen
+
+      integer nf_free_vlen
+      external nf_free_vlen
+
+!     User defined types - enums.
+      integer nf_def_enum
+      external nf_def_enum
+
+      integer nf_insert_enum
+      external nf_insert_enum
+
+      integer nf_inq_enum
+      external nf_inq_enum
+
+      integer nf_inq_enum_member
+      external nf_inq_enum_member
+
+      integer nf_inq_enum_ident
+      external nf_inq_enum_ident
+
+!     User defined types - opaque.
+      integer nf_def_opaque
+      external nf_def_opaque
+
+      integer nf_inq_opaque
+      external nf_inq_opaque
+
+!     Write and read attributes of any type, including user defined
+!     types.
+      integer nf_put_att
+      external nf_put_att
+      integer nf_get_att
+      external nf_get_att
+
+!     Write and read variables of any type, including user defined
+!     types.
+      integer nf_put_var
+      external nf_put_var
+      integer nf_put_var1
+      external nf_put_var1
+      integer nf_put_vara
+      external nf_put_vara
+      integer nf_put_vars
+      external nf_put_vars
+      integer nf_get_var
+      external nf_get_var
+      integer nf_get_var1
+      external nf_get_var1
+      integer nf_get_vara
+      external nf_get_vara
+      integer nf_get_vars
+      external nf_get_vars
+
+!     64-bit int functions.
+      integer nf_put_var1_int64
+      external nf_put_var1_int64
+      integer nf_put_vara_int64
+      external nf_put_vara_int64
+      integer nf_put_vars_int64
+      external nf_put_vars_int64
+      integer nf_put_varm_int64
+      external nf_put_varm_int64
+      integer nf_put_var_int64
+      external nf_put_var_int64
+      integer nf_get_var1_int64
+      external nf_get_var1_int64
+      integer nf_get_vara_int64
+      external nf_get_vara_int64
+      integer nf_get_vars_int64
+      external nf_get_vars_int64
+      integer nf_get_varm_int64
+      external nf_get_varm_int64
+      integer nf_get_var_int64
+      external nf_get_var_int64
+
+!     For helping F77 users with VLENs.
+      integer nf_get_vlen_element
+      external nf_get_vlen_element
+      integer nf_put_vlen_element
+      external nf_put_vlen_element
+
+!     For dealing with file level chunk cache.
+      integer nf_set_chunk_cache
+      external nf_set_chunk_cache
+      integer nf_get_chunk_cache
+      external nf_get_chunk_cache
+
+!     For dealing with per variable chunk cache.
+      integer nf_set_var_chunk_cache
+      external nf_set_var_chunk_cache
+      integer nf_get_var_chunk_cache
+      external nf_get_var_chunk_cache
+
+!     NetCDF-2.
+!ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
+! begin netcdf 2.4 backward compatibility:
+!
+
+!      
+! functions in the fortran interface
+!
+      integer nccre
+      integer ncopn
+      integer ncddef
+      integer ncdid
+      integer ncvdef
+      integer ncvid
+      integer nctlen
+      integer ncsfil
+
+      external nccre
+      external ncopn
+      external ncddef
+      external ncdid
+      external ncvdef
+      external ncvid
+      external nctlen
+      external ncsfil
+
+
+      integer ncrdwr
+      integer nccreat
+      integer ncexcl
+      integer ncindef
+      integer ncnsync
+      integer nchsync
+      integer ncndirty
+      integer nchdirty
+      integer nclink
+      integer ncnowrit
+      integer ncwrite
+      integer ncclob
+      integer ncnoclob
+      integer ncglobal
+      integer ncfill
+      integer ncnofill
+      integer maxncop
+      integer maxncdim
+      integer maxncatt
+      integer maxncvar
+      integer maxncnam
+      integer maxvdims
+      integer ncnoerr
+      integer ncebadid
+      integer ncenfile
+      integer nceexist
+      integer nceinval
+      integer nceperm
+      integer ncenotin
+      integer nceindef
+      integer ncecoord
+      integer ncemaxds
+      integer ncename
+      integer ncenoatt
+      integer ncemaxat
+      integer ncebadty
+      integer ncebadd
+      integer ncests
+      integer nceunlim
+      integer ncemaxvs
+      integer ncenotvr
+      integer nceglob
+      integer ncenotnc
+      integer ncfoobar
+      integer ncsyserr
+      integer ncfatal
+      integer ncverbos
+      integer ncentool
+
+
+!
+! netcdf data types:
+!
+      integer ncbyte
+      integer ncchar
+      integer ncshort
+      integer nclong
+      integer ncfloat
+      integer ncdouble
+
+      parameter(ncbyte = 1)
+      parameter(ncchar = 2)
+      parameter(ncshort = 3)
+      parameter(nclong = 4)
+      parameter(ncfloat = 5)
+      parameter(ncdouble = 6)
+
+!     
+!     masks for the struct nc flag field; passed in as 'mode' arg to
+!     nccreate and ncopen.
+!     
+
+!     read/write, 0 => readonly 
+      parameter(ncrdwr = 1)
+!     in create phase, cleared by ncendef 
+      parameter(nccreat = 2)
+!     on create destroy existing file 
+      parameter(ncexcl = 4)
+!     in define mode, cleared by ncendef 
+      parameter(ncindef = 8)
+!     synchronise numrecs on change (x'10')
+      parameter(ncnsync = 16)
+!     synchronise whole header on change (x'20')
+      parameter(nchsync = 32)
+!     numrecs has changed (x'40')
+      parameter(ncndirty = 64)  
+!     header info has changed (x'80')
+      parameter(nchdirty = 128)
+!     prefill vars on endef and increase of record, the default behavior
+      parameter(ncfill = 0)
+!     do not fill vars on endef and increase of record (x'100')
+      parameter(ncnofill = 256)
+!     isa link (x'8000')
+      parameter(nclink = 32768)
+
+!     
+!     'mode' arguments for nccreate and ncopen
+!     
+      parameter(ncnowrit = 0)
+      parameter(ncwrite = ncrdwr)
+      parameter(ncclob = nf_clobber)
+      parameter(ncnoclob = nf_noclobber)
+
+!     
+!     'size' argument to ncdimdef for an unlimited dimension
+!     
+      integer ncunlim
+      parameter(ncunlim = 0)
+
+!     
+!     attribute id to put/get a global attribute
+!     
+      parameter(ncglobal  = 0)
+
+!     
+!     advisory maximums:
+!     
+      parameter(maxncop = 64)
+      parameter(maxncdim = 1024)
+      parameter(maxncatt = 8192)
+      parameter(maxncvar = 8192)
+!     not enforced 
+      parameter(maxncnam = 256)
+      parameter(maxvdims = maxncdim)
+
+!     
+!     global netcdf error status variable
+!     initialized in error.c
+!     
+
+!     no error 
+      parameter(ncnoerr = nf_noerr)
+!     not a netcdf id 
+      parameter(ncebadid = nf_ebadid)
+!     too many netcdfs open 
+      parameter(ncenfile = -31)   ! nc_syserr
+!     netcdf file exists && ncnoclob
+      parameter(nceexist = nf_eexist)
+!     invalid argument 
+      parameter(nceinval = nf_einval)
+!     write to read only 
+      parameter(nceperm = nf_eperm)
+!     operation not allowed in data mode 
+      parameter(ncenotin = nf_enotindefine )   
+!     operation not allowed in define mode 
+      parameter(nceindef = nf_eindefine)   
+!     coordinates out of domain 
+      parameter(ncecoord = nf_einvalcoords)
+!     maxncdims exceeded 
+      parameter(ncemaxds = nf_emaxdims)
+!     string match to name in use 
+      parameter(ncename = nf_enameinuse)   
+!     attribute not found 
+      parameter(ncenoatt = nf_enotatt)
+!     maxncattrs exceeded 
+      parameter(ncemaxat = nf_emaxatts)
+!     not a netcdf data type 
+      parameter(ncebadty = nf_ebadtype)
+!     invalid dimension id 
+      parameter(ncebadd = nf_ebaddim)
+!     ncunlimited in the wrong index 
+      parameter(nceunlim = nf_eunlimpos)
+!     maxncvars exceeded 
+      parameter(ncemaxvs = nf_emaxvars)
+!     variable not found 
+      parameter(ncenotvr = nf_enotvar)
+!     action prohibited on ncglobal varid 
+      parameter(nceglob = nf_eglobal)
+!     not a netcdf file 
+      parameter(ncenotnc = nf_enotnc)
+      parameter(ncests = nf_ests)
+      parameter (ncentool = nf_emaxname) 
+      parameter(ncfoobar = 32)
+      parameter(ncsyserr = -31)
+
+!     
+!     global options variable. used to determine behavior of error handler.
+!     initialized in lerror.c
+!     
+      parameter(ncfatal = 1)
+      parameter(ncverbos = 2)
+
+!
+!     default fill values.  these must be the same as in the c interface.
+!
+      integer filbyte
+      integer filchar
+      integer filshort
+      integer fillong
+      real filfloat
+      doubleprecision fildoub
+
+      parameter (filbyte = -127)
+      parameter (filchar = 0)
+      parameter (filshort = -32767)
+      parameter (fillong = -2147483647)
+      parameter (filfloat = 9.9692099683868690e+36)
+      parameter (fildoub = 9.9692099683868690e+36)
diff --git a/privatemodules/nc4/include/netcdf.mod b/privatemodules/nc4/include/netcdf.mod
new file mode 100644
index 0000000000000000000000000000000000000000..feeaa8230267c2faae785f64933c1e9b17e0860d
Binary files /dev/null and b/privatemodules/nc4/include/netcdf.mod differ
diff --git a/privatemodules/nc4/include/netcdf4_f03.mod b/privatemodules/nc4/include/netcdf4_f03.mod
new file mode 100644
index 0000000000000000000000000000000000000000..d9c781f77939cc8e61a942a9c25ac137891d747a
Binary files /dev/null and b/privatemodules/nc4/include/netcdf4_f03.mod differ
diff --git a/privatemodules/nc4/include/netcdf4_nc_interfaces.mod b/privatemodules/nc4/include/netcdf4_nc_interfaces.mod
new file mode 100644
index 0000000000000000000000000000000000000000..d11c90c4e4218485638d4106c176c29770a6dcb6
Binary files /dev/null and b/privatemodules/nc4/include/netcdf4_nc_interfaces.mod differ
diff --git a/privatemodules/nc4/include/netcdf4_nf_interfaces.mod b/privatemodules/nc4/include/netcdf4_nf_interfaces.mod
new file mode 100644
index 0000000000000000000000000000000000000000..790b498ba1a513aa9b0d9cd7f42d602b04b97691
Binary files /dev/null and b/privatemodules/nc4/include/netcdf4_nf_interfaces.mod differ
diff --git a/privatemodules/nc4/include/netcdf_f03.mod b/privatemodules/nc4/include/netcdf_f03.mod
new file mode 100644
index 0000000000000000000000000000000000000000..a18260bb100f99d9e4d4a8ea54ba0b4b33441e2a
Binary files /dev/null and b/privatemodules/nc4/include/netcdf_f03.mod differ
diff --git a/privatemodules/nc4/include/netcdf_fortv2_c_interfaces.mod b/privatemodules/nc4/include/netcdf_fortv2_c_interfaces.mod
new file mode 100644
index 0000000000000000000000000000000000000000..bbd0c7b544abe7967faeb8d9b547544d4d8014e8
Binary files /dev/null and b/privatemodules/nc4/include/netcdf_fortv2_c_interfaces.mod differ
diff --git a/privatemodules/nc4/include/netcdf_mem.h b/privatemodules/nc4/include/netcdf_mem.h
new file mode 100644
index 0000000000000000000000000000000000000000..12f6bfaa8f04d481b9f56ade27e64c39310defd0
--- /dev/null
+++ b/privatemodules/nc4/include/netcdf_mem.h
@@ -0,0 +1,39 @@
+/*! \file netcdf_mem.h
+ *
+ * Main header file for in-memory (diskless) functionality.
+ *
+ * Copyright 2010 University Corporation for Atmospheric
+ * Research/Unidata. See COPYRIGHT file for more info.
+ *
+ * See \ref copyright file for more info.
+ *
+ */
+
+#ifndef NETCDF_MEM_H
+#define NETCDF_MEM_H 1
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+/* Declaration modifiers for DLL support (MSC et al) */
+#if defined(DLL_NETCDF) /* define when library is a DLL */
+#  if defined(DLL_EXPORT) /* define when building the library */
+#   define MSC_EXTRA __declspec(dllexport)
+#  else
+#   define MSC_EXTRA __declspec(dllimport)
+#  endif
+#include <io.h>
+#else
+#define MSC_EXTRA
+#endif	/* defined(DLL_NETCDF) */
+
+# define EXTERNL MSC_EXTRA extern
+
+EXTERNL int nc_open_mem(const char* path, int mode, size_t size, void* memory, int* ncidp);
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* NETCDF_MEM_H */
diff --git a/privatemodules/nc4/include/netcdf_meta.h b/privatemodules/nc4/include/netcdf_meta.h
new file mode 100644
index 0000000000000000000000000000000000000000..fe74e61c0e145121a37f2728220826ea14b5ef34
--- /dev/null
+++ b/privatemodules/nc4/include/netcdf_meta.h
@@ -0,0 +1,52 @@
+/*! \file netcdf_meta.h
+ *
+ * Meta information for libnetcdf which can be used by other packages which
+ * depend on libnetcdf.
+ *
+ * This file is automatically generated by the build system
+ * at configure time, and contains information related to
+ * how libnetcdf was built.  It will not be required to
+ * include this file unless you want to probe the capabilities
+ * of libnetcdf. This should ideally only happen when configuring
+ * a project which depends on libnetcdf.  At configure time,
+ * the dependant project can set its own macros which can be used
+ * in conditionals.
+ *
+ * Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+ * 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014
+ * University Corporation for Atmospheric Research/Unidata.
+ * See \ref copyright file for more info.
+ */
+
+#ifndef NETCDF_META_H
+#define NETCDF_META_H
+
+#define NC_VERSION_MAJOR 4 /*!< netcdf-c major version. */
+#define NC_VERSION_MINOR 4 /*!< netcdf-c minor version. */
+#define NC_VERSION_PATCH 1 /*!< netcdf-c patch version. */
+#define NC_VERSION_NOTE  ".1" /*!< netcdf-c note. May be blank. */
+
+/*! netcdf-c version string.
+ *
+ * The format of the netcdf-c version string is as follows:
+ * \code
+ * NC_VERSION_MAJOR.NC_VERSION_MINOR.NC_VERSION_PATCH.NC_VERSION_NOTE
+ * \endcode
+ * Note that the trailing NC_VERSION_NOTE may be empty. It serves for
+ * identifiers such as '-rc1', etc.
+ */
+#define NC_VERSION       "4.4.1.1"
+
+#define NC_HAS_NC2       1 /*!< API version 2 support. */
+#define NC_HAS_NC4       1 /*!< API version 4 support. */
+#define NC_HAS_HDF4      0 /*!< hdf4 support. */
+#define NC_HAS_HDF5      1 /*!< hdf5 support. */
+#define NC_HAS_SZIP      0 /*!< szip support (hdf5 only) */
+#define NC_HAS_DAP       1 /*!< DAP support. */
+#define NC_HAS_DISKLESS  1 /*!< diskless support. */
+#define NC_HAS_MMAP      0 /*!< mmap support. */
+#define NC_HAS_JNA       0 /*!< jna support. */
+#define NC_HAS_PNETCDF   0 /*!< pnetcdf support. */
+#define NC_HAS_PARALLEL  0 /*!< parallel IO support via hdf5 and/or pnetcdf. */
+
+#endif
diff --git a/privatemodules/nc4/include/netcdf_nc_data.mod b/privatemodules/nc4/include/netcdf_nc_data.mod
new file mode 100644
index 0000000000000000000000000000000000000000..ff97ffe743ebb5974c739ac74a6b317e9a2d5475
Binary files /dev/null and b/privatemodules/nc4/include/netcdf_nc_data.mod differ
diff --git a/privatemodules/nc4/include/netcdf_nc_interfaces.mod b/privatemodules/nc4/include/netcdf_nc_interfaces.mod
new file mode 100644
index 0000000000000000000000000000000000000000..a9426d978680e3208115f3d0f95d5432c841d1e3
Binary files /dev/null and b/privatemodules/nc4/include/netcdf_nc_interfaces.mod differ
diff --git a/privatemodules/nc4/include/netcdf_nf_data.mod b/privatemodules/nc4/include/netcdf_nf_data.mod
new file mode 100644
index 0000000000000000000000000000000000000000..c5640a1ca77d33d705ff6c3481a70ef1bbb7043f
Binary files /dev/null and b/privatemodules/nc4/include/netcdf_nf_data.mod differ
diff --git a/privatemodules/nc4/include/netcdf_nf_interfaces.mod b/privatemodules/nc4/include/netcdf_nf_interfaces.mod
new file mode 100644
index 0000000000000000000000000000000000000000..6950ef14a5a67550ff16c84048fc1ee79dd4a067
Binary files /dev/null and b/privatemodules/nc4/include/netcdf_nf_interfaces.mod differ
diff --git a/privatemodules/nc4/include/typesizes.mod b/privatemodules/nc4/include/typesizes.mod
new file mode 100644
index 0000000000000000000000000000000000000000..ec701c4f1756476b8df0ebc515401cbb1d93c91d
Binary files /dev/null and b/privatemodules/nc4/include/typesizes.mod differ
diff --git a/privatemodules/nc4/include/zconf.h b/privatemodules/nc4/include/zconf.h
new file mode 100644
index 0000000000000000000000000000000000000000..996fff29215324c863c674d3aba0733ebcfb0cf3
--- /dev/null
+++ b/privatemodules/nc4/include/zconf.h
@@ -0,0 +1,511 @@
+/* zconf.h -- configuration of the zlib compression library
+ * Copyright (C) 1995-2013 Jean-loup Gailly.
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/* @(#) $Id$ */
+
+#ifndef ZCONF_H
+#define ZCONF_H
+
+/*
+ * If you *really* need a unique prefix for all types and library functions,
+ * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it.
+ * Even better than compiling with -DZ_PREFIX would be to use configure to set
+ * this permanently in zconf.h using "./configure --zprefix".
+ */
+#ifdef Z_PREFIX     /* may be set to #if 1 by ./configure */
+#  define Z_PREFIX_SET
+
+/* all linked symbols */
+#  define _dist_code            z__dist_code
+#  define _length_code          z__length_code
+#  define _tr_align             z__tr_align
+#  define _tr_flush_bits        z__tr_flush_bits
+#  define _tr_flush_block       z__tr_flush_block
+#  define _tr_init              z__tr_init
+#  define _tr_stored_block      z__tr_stored_block
+#  define _tr_tally             z__tr_tally
+#  define adler32               z_adler32
+#  define adler32_combine       z_adler32_combine
+#  define adler32_combine64     z_adler32_combine64
+#  ifndef Z_SOLO
+#    define compress              z_compress
+#    define compress2             z_compress2
+#    define compressBound         z_compressBound
+#  endif
+#  define crc32                 z_crc32
+#  define crc32_combine         z_crc32_combine
+#  define crc32_combine64       z_crc32_combine64
+#  define deflate               z_deflate
+#  define deflateBound          z_deflateBound
+#  define deflateCopy           z_deflateCopy
+#  define deflateEnd            z_deflateEnd
+#  define deflateInit2_         z_deflateInit2_
+#  define deflateInit_          z_deflateInit_
+#  define deflateParams         z_deflateParams
+#  define deflatePending        z_deflatePending
+#  define deflatePrime          z_deflatePrime
+#  define deflateReset          z_deflateReset
+#  define deflateResetKeep      z_deflateResetKeep
+#  define deflateSetDictionary  z_deflateSetDictionary
+#  define deflateSetHeader      z_deflateSetHeader
+#  define deflateTune           z_deflateTune
+#  define deflate_copyright     z_deflate_copyright
+#  define get_crc_table         z_get_crc_table
+#  ifndef Z_SOLO
+#    define gz_error              z_gz_error
+#    define gz_intmax             z_gz_intmax
+#    define gz_strwinerror        z_gz_strwinerror
+#    define gzbuffer              z_gzbuffer
+#    define gzclearerr            z_gzclearerr
+#    define gzclose               z_gzclose
+#    define gzclose_r             z_gzclose_r
+#    define gzclose_w             z_gzclose_w
+#    define gzdirect              z_gzdirect
+#    define gzdopen               z_gzdopen
+#    define gzeof                 z_gzeof
+#    define gzerror               z_gzerror
+#    define gzflush               z_gzflush
+#    define gzgetc                z_gzgetc
+#    define gzgetc_               z_gzgetc_
+#    define gzgets                z_gzgets
+#    define gzoffset              z_gzoffset
+#    define gzoffset64            z_gzoffset64
+#    define gzopen                z_gzopen
+#    define gzopen64              z_gzopen64
+#    ifdef _WIN32
+#      define gzopen_w              z_gzopen_w
+#    endif
+#    define gzprintf              z_gzprintf
+#    define gzvprintf             z_gzvprintf
+#    define gzputc                z_gzputc
+#    define gzputs                z_gzputs
+#    define gzread                z_gzread
+#    define gzrewind              z_gzrewind
+#    define gzseek                z_gzseek
+#    define gzseek64              z_gzseek64
+#    define gzsetparams           z_gzsetparams
+#    define gztell                z_gztell
+#    define gztell64              z_gztell64
+#    define gzungetc              z_gzungetc
+#    define gzwrite               z_gzwrite
+#  endif
+#  define inflate               z_inflate
+#  define inflateBack           z_inflateBack
+#  define inflateBackEnd        z_inflateBackEnd
+#  define inflateBackInit_      z_inflateBackInit_
+#  define inflateCopy           z_inflateCopy
+#  define inflateEnd            z_inflateEnd
+#  define inflateGetHeader      z_inflateGetHeader
+#  define inflateInit2_         z_inflateInit2_
+#  define inflateInit_          z_inflateInit_
+#  define inflateMark           z_inflateMark
+#  define inflatePrime          z_inflatePrime
+#  define inflateReset          z_inflateReset
+#  define inflateReset2         z_inflateReset2
+#  define inflateSetDictionary  z_inflateSetDictionary
+#  define inflateGetDictionary  z_inflateGetDictionary
+#  define inflateSync           z_inflateSync
+#  define inflateSyncPoint      z_inflateSyncPoint
+#  define inflateUndermine      z_inflateUndermine
+#  define inflateResetKeep      z_inflateResetKeep
+#  define inflate_copyright     z_inflate_copyright
+#  define inflate_fast          z_inflate_fast
+#  define inflate_table         z_inflate_table
+#  ifndef Z_SOLO
+#    define uncompress            z_uncompress
+#  endif
+#  define zError                z_zError
+#  ifndef Z_SOLO
+#    define zcalloc               z_zcalloc
+#    define zcfree                z_zcfree
+#  endif
+#  define zlibCompileFlags      z_zlibCompileFlags
+#  define zlibVersion           z_zlibVersion
+
+/* all zlib typedefs in zlib.h and zconf.h */
+#  define Byte                  z_Byte
+#  define Bytef                 z_Bytef
+#  define alloc_func            z_alloc_func
+#  define charf                 z_charf
+#  define free_func             z_free_func
+#  ifndef Z_SOLO
+#    define gzFile                z_gzFile
+#  endif
+#  define gz_header             z_gz_header
+#  define gz_headerp            z_gz_headerp
+#  define in_func               z_in_func
+#  define intf                  z_intf
+#  define out_func              z_out_func
+#  define uInt                  z_uInt
+#  define uIntf                 z_uIntf
+#  define uLong                 z_uLong
+#  define uLongf                z_uLongf
+#  define voidp                 z_voidp
+#  define voidpc                z_voidpc
+#  define voidpf                z_voidpf
+
+/* all zlib structs in zlib.h and zconf.h */
+#  define gz_header_s           z_gz_header_s
+#  define internal_state        z_internal_state
+
+#endif
+
+#if defined(__MSDOS__) && !defined(MSDOS)
+#  define MSDOS
+#endif
+#if (defined(OS_2) || defined(__OS2__)) && !defined(OS2)
+#  define OS2
+#endif
+#if defined(_WINDOWS) && !defined(WINDOWS)
+#  define WINDOWS
+#endif
+#if defined(_WIN32) || defined(_WIN32_WCE) || defined(__WIN32__)
+#  ifndef WIN32
+#    define WIN32
+#  endif
+#endif
+#if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32)
+#  if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__)
+#    ifndef SYS16BIT
+#      define SYS16BIT
+#    endif
+#  endif
+#endif
+
+/*
+ * Compile with -DMAXSEG_64K if the alloc function cannot allocate more
+ * than 64k bytes at a time (needed on systems with 16-bit int).
+ */
+#ifdef SYS16BIT
+#  define MAXSEG_64K
+#endif
+#ifdef MSDOS
+#  define UNALIGNED_OK
+#endif
+
+#ifdef __STDC_VERSION__
+#  ifndef STDC
+#    define STDC
+#  endif
+#  if __STDC_VERSION__ >= 199901L
+#    ifndef STDC99
+#      define STDC99
+#    endif
+#  endif
+#endif
+#if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus))
+#  define STDC
+#endif
+#if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__))
+#  define STDC
+#endif
+#if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32))
+#  define STDC
+#endif
+#if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__))
+#  define STDC
+#endif
+
+#if defined(__OS400__) && !defined(STDC)    /* iSeries (formerly AS/400). */
+#  define STDC
+#endif
+
+#ifndef STDC
+#  ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */
+#    define const       /* note: need a more gentle solution here */
+#  endif
+#endif
+
+#if defined(ZLIB_CONST) && !defined(z_const)
+#  define z_const const
+#else
+#  define z_const
+#endif
+
+/* Some Mac compilers merge all .h files incorrectly: */
+#if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__)
+#  define NO_DUMMY_DECL
+#endif
+
+/* Maximum value for memLevel in deflateInit2 */
+#ifndef MAX_MEM_LEVEL
+#  ifdef MAXSEG_64K
+#    define MAX_MEM_LEVEL 8
+#  else
+#    define MAX_MEM_LEVEL 9
+#  endif
+#endif
+
+/* Maximum value for windowBits in deflateInit2 and inflateInit2.
+ * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files
+ * created by gzip. (Files created by minigzip can still be extracted by
+ * gzip.)
+ */
+#ifndef MAX_WBITS
+#  define MAX_WBITS   15 /* 32K LZ77 window */
+#endif
+
+/* The memory requirements for deflate are (in bytes):
+            (1 << (windowBits+2)) +  (1 << (memLevel+9))
+ that is: 128K for windowBits=15  +  128K for memLevel = 8  (default values)
+ plus a few kilobytes for small objects. For example, if you want to reduce
+ the default memory requirements from 256K to 128K, compile with
+     make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7"
+ Of course this will generally degrade compression (there's no free lunch).
+
+   The memory requirements for inflate are (in bytes) 1 << windowBits
+ that is, 32K for windowBits=15 (default value) plus a few kilobytes
+ for small objects.
+*/
+
+                        /* Type declarations */
+
+#ifndef OF /* function prototypes */
+#  ifdef STDC
+#    define OF(args)  args
+#  else
+#    define OF(args)  ()
+#  endif
+#endif
+
+#ifndef Z_ARG /* function prototypes for stdarg */
+#  if defined(STDC) || defined(Z_HAVE_STDARG_H)
+#    define Z_ARG(args)  args
+#  else
+#    define Z_ARG(args)  ()
+#  endif
+#endif
+
+/* The following definitions for FAR are needed only for MSDOS mixed
+ * model programming (small or medium model with some far allocations).
+ * This was tested only with MSC; for other MSDOS compilers you may have
+ * to define NO_MEMCPY in zutil.h.  If you don't need the mixed model,
+ * just define FAR to be empty.
+ */
+#ifdef SYS16BIT
+#  if defined(M_I86SM) || defined(M_I86MM)
+     /* MSC small or medium model */
+#    define SMALL_MEDIUM
+#    ifdef _MSC_VER
+#      define FAR _far
+#    else
+#      define FAR far
+#    endif
+#  endif
+#  if (defined(__SMALL__) || defined(__MEDIUM__))
+     /* Turbo C small or medium model */
+#    define SMALL_MEDIUM
+#    ifdef __BORLANDC__
+#      define FAR _far
+#    else
+#      define FAR far
+#    endif
+#  endif
+#endif
+
+#if defined(WINDOWS) || defined(WIN32)
+   /* If building or using zlib as a DLL, define ZLIB_DLL.
+    * This is not mandatory, but it offers a little performance increase.
+    */
+#  ifdef ZLIB_DLL
+#    if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500))
+#      ifdef ZLIB_INTERNAL
+#        define ZEXTERN extern __declspec(dllexport)
+#      else
+#        define ZEXTERN extern __declspec(dllimport)
+#      endif
+#    endif
+#  endif  /* ZLIB_DLL */
+   /* If building or using zlib with the WINAPI/WINAPIV calling convention,
+    * define ZLIB_WINAPI.
+    * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI.
+    */
+#  ifdef ZLIB_WINAPI
+#    ifdef FAR
+#      undef FAR
+#    endif
+#    include <windows.h>
+     /* No need for _export, use ZLIB.DEF instead. */
+     /* For complete Windows compatibility, use WINAPI, not __stdcall. */
+#    define ZEXPORT WINAPI
+#    ifdef WIN32
+#      define ZEXPORTVA WINAPIV
+#    else
+#      define ZEXPORTVA FAR CDECL
+#    endif
+#  endif
+#endif
+
+#if defined (__BEOS__)
+#  ifdef ZLIB_DLL
+#    ifdef ZLIB_INTERNAL
+#      define ZEXPORT   __declspec(dllexport)
+#      define ZEXPORTVA __declspec(dllexport)
+#    else
+#      define ZEXPORT   __declspec(dllimport)
+#      define ZEXPORTVA __declspec(dllimport)
+#    endif
+#  endif
+#endif
+
+#ifndef ZEXTERN
+#  define ZEXTERN extern
+#endif
+#ifndef ZEXPORT
+#  define ZEXPORT
+#endif
+#ifndef ZEXPORTVA
+#  define ZEXPORTVA
+#endif
+
+#ifndef FAR
+#  define FAR
+#endif
+
+#if !defined(__MACTYPES__)
+typedef unsigned char  Byte;  /* 8 bits */
+#endif
+typedef unsigned int   uInt;  /* 16 bits or more */
+typedef unsigned long  uLong; /* 32 bits or more */
+
+#ifdef SMALL_MEDIUM
+   /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */
+#  define Bytef Byte FAR
+#else
+   typedef Byte  FAR Bytef;
+#endif
+typedef char  FAR charf;
+typedef int   FAR intf;
+typedef uInt  FAR uIntf;
+typedef uLong FAR uLongf;
+
+#ifdef STDC
+   typedef void const *voidpc;
+   typedef void FAR   *voidpf;
+   typedef void       *voidp;
+#else
+   typedef Byte const *voidpc;
+   typedef Byte FAR   *voidpf;
+   typedef Byte       *voidp;
+#endif
+
+#if !defined(Z_U4) && !defined(Z_SOLO) && defined(STDC)
+#  include <limits.h>
+#  if (UINT_MAX == 0xffffffffUL)
+#    define Z_U4 unsigned
+#  elif (ULONG_MAX == 0xffffffffUL)
+#    define Z_U4 unsigned long
+#  elif (USHRT_MAX == 0xffffffffUL)
+#    define Z_U4 unsigned short
+#  endif
+#endif
+
+#ifdef Z_U4
+   typedef Z_U4 z_crc_t;
+#else
+   typedef unsigned long z_crc_t;
+#endif
+
+#if 1    /* was set to #if 1 by ./configure */
+#  define Z_HAVE_UNISTD_H
+#endif
+
+#if 1    /* was set to #if 1 by ./configure */
+#  define Z_HAVE_STDARG_H
+#endif
+
+#ifdef STDC
+#  ifndef Z_SOLO
+#    include <sys/types.h>      /* for off_t */
+#  endif
+#endif
+
+#if defined(STDC) || defined(Z_HAVE_STDARG_H)
+#  ifndef Z_SOLO
+#    include <stdarg.h>         /* for va_list */
+#  endif
+#endif
+
+#ifdef _WIN32
+#  ifndef Z_SOLO
+#    include <stddef.h>         /* for wchar_t */
+#  endif
+#endif
+
+/* a little trick to accommodate both "#define _LARGEFILE64_SOURCE" and
+ * "#define _LARGEFILE64_SOURCE 1" as requesting 64-bit operations, (even
+ * though the former does not conform to the LFS document), but considering
+ * both "#undef _LARGEFILE64_SOURCE" and "#define _LARGEFILE64_SOURCE 0" as
+ * equivalently requesting no 64-bit operations
+ */
+#if defined(_LARGEFILE64_SOURCE) && -_LARGEFILE64_SOURCE - -1 == 1
+#  undef _LARGEFILE64_SOURCE
+#endif
+
+#if defined(__WATCOMC__) && !defined(Z_HAVE_UNISTD_H)
+#  define Z_HAVE_UNISTD_H
+#endif
+#ifndef Z_SOLO
+#  if defined(Z_HAVE_UNISTD_H) || defined(_LARGEFILE64_SOURCE)
+#    include <unistd.h>         /* for SEEK_*, off_t, and _LFS64_LARGEFILE */
+#    ifdef VMS
+#      include <unixio.h>       /* for off_t */
+#    endif
+#    ifndef z_off_t
+#      define z_off_t off_t
+#    endif
+#  endif
+#endif
+
+#if defined(_LFS64_LARGEFILE) && _LFS64_LARGEFILE-0
+#  define Z_LFS64
+#endif
+
+#if defined(_LARGEFILE64_SOURCE) && defined(Z_LFS64)
+#  define Z_LARGE64
+#endif
+
+#if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS-0 == 64 && defined(Z_LFS64)
+#  define Z_WANT64
+#endif
+
+#if !defined(SEEK_SET) && !defined(Z_SOLO)
+#  define SEEK_SET        0       /* Seek from beginning of file.  */
+#  define SEEK_CUR        1       /* Seek from current position.  */
+#  define SEEK_END        2       /* Set file pointer to EOF plus "offset" */
+#endif
+
+#ifndef z_off_t
+#  define z_off_t long
+#endif
+
+#if !defined(_WIN32) && defined(Z_LARGE64)
+#  define z_off64_t off64_t
+#else
+#  if defined(_WIN32) && !defined(__GNUC__) && !defined(Z_SOLO)
+#    define z_off64_t __int64
+#  else
+#    define z_off64_t z_off_t
+#  endif
+#endif
+
+/* MVS linker does not support external names larger than 8 bytes */
+#if defined(__MVS__)
+  #pragma map(deflateInit_,"DEIN")
+  #pragma map(deflateInit2_,"DEIN2")
+  #pragma map(deflateEnd,"DEEND")
+  #pragma map(deflateBound,"DEBND")
+  #pragma map(inflateInit_,"ININ")
+  #pragma map(inflateInit2_,"ININ2")
+  #pragma map(inflateEnd,"INEND")
+  #pragma map(inflateSync,"INSY")
+  #pragma map(inflateSetDictionary,"INSEDI")
+  #pragma map(compressBound,"CMBND")
+  #pragma map(inflate_table,"INTABL")
+  #pragma map(inflate_fast,"INFA")
+  #pragma map(inflate_copyright,"INCOPY")
+#endif
+
+#endif /* ZCONF_H */
diff --git a/privatemodules/nc4/include/zlib.h b/privatemodules/nc4/include/zlib.h
new file mode 100644
index 0000000000000000000000000000000000000000..3e0c7672ac51d93782f020bba32eb1207617e70a
--- /dev/null
+++ b/privatemodules/nc4/include/zlib.h
@@ -0,0 +1,1768 @@
+/* zlib.h -- interface of the 'zlib' general purpose compression library
+  version 1.2.8, April 28th, 2013
+
+  Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler
+
+  This software is provided 'as-is', without any express or implied
+  warranty.  In no event will the authors be held liable for any damages
+  arising from the use of this software.
+
+  Permission is granted to anyone to use this software for any purpose,
+  including commercial applications, and to alter it and redistribute it
+  freely, subject to the following restrictions:
+
+  1. The origin of this software must not be misrepresented; you must not
+     claim that you wrote the original software. If you use this software
+     in a product, an acknowledgment in the product documentation would be
+     appreciated but is not required.
+  2. Altered source versions must be plainly marked as such, and must not be
+     misrepresented as being the original software.
+  3. This notice may not be removed or altered from any source distribution.
+
+  Jean-loup Gailly        Mark Adler
+  jloup@gzip.org          madler@alumni.caltech.edu
+
+
+  The data format used by the zlib library is described by RFCs (Request for
+  Comments) 1950 to 1952 in the files http://tools.ietf.org/html/rfc1950
+  (zlib format), rfc1951 (deflate format) and rfc1952 (gzip format).
+*/
+
+#ifndef ZLIB_H
+#define ZLIB_H
+
+#include "zconf.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define ZLIB_VERSION "1.2.8"
+#define ZLIB_VERNUM 0x1280
+#define ZLIB_VER_MAJOR 1
+#define ZLIB_VER_MINOR 2
+#define ZLIB_VER_REVISION 8
+#define ZLIB_VER_SUBREVISION 0
+
+/*
+    The 'zlib' compression library provides in-memory compression and
+  decompression functions, including integrity checks of the uncompressed data.
+  This version of the library supports only one compression method (deflation)
+  but other algorithms will be added later and will have the same stream
+  interface.
+
+    Compression can be done in a single step if the buffers are large enough,
+  or can be done by repeated calls of the compression function.  In the latter
+  case, the application must provide more input and/or consume the output
+  (providing more output space) before each call.
+
+    The compressed data format used by default by the in-memory functions is
+  the zlib format, which is a zlib wrapper documented in RFC 1950, wrapped
+  around a deflate stream, which is itself documented in RFC 1951.
+
+    The library also supports reading and writing files in gzip (.gz) format
+  with an interface similar to that of stdio using the functions that start
+  with "gz".  The gzip format is different from the zlib format.  gzip is a
+  gzip wrapper, documented in RFC 1952, wrapped around a deflate stream.
+
+    This library can optionally read and write gzip streams in memory as well.
+
+    The zlib format was designed to be compact and fast for use in memory
+  and on communications channels.  The gzip format was designed for single-
+  file compression on file systems, has a larger header than zlib to maintain
+  directory information, and uses a different, slower check method than zlib.
+
+    The library does not install any signal handler.  The decoder checks
+  the consistency of the compressed data, so the library should never crash
+  even in case of corrupted input.
+*/
+
+typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size));
+typedef void   (*free_func)  OF((voidpf opaque, voidpf address));
+
+struct internal_state;
+
+typedef struct z_stream_s {
+    z_const Bytef *next_in;     /* next input byte */
+    uInt     avail_in;  /* number of bytes available at next_in */
+    uLong    total_in;  /* total number of input bytes read so far */
+
+    Bytef    *next_out; /* next output byte should be put there */
+    uInt     avail_out; /* remaining free space at next_out */
+    uLong    total_out; /* total number of bytes output so far */
+
+    z_const char *msg;  /* last error message, NULL if no error */
+    struct internal_state FAR *state; /* not visible by applications */
+
+    alloc_func zalloc;  /* used to allocate the internal state */
+    free_func  zfree;   /* used to free the internal state */
+    voidpf     opaque;  /* private data object passed to zalloc and zfree */
+
+    int     data_type;  /* best guess about the data type: binary or text */
+    uLong   adler;      /* adler32 value of the uncompressed data */
+    uLong   reserved;   /* reserved for future use */
+} z_stream;
+
+typedef z_stream FAR *z_streamp;
+
+/*
+     gzip header information passed to and from zlib routines.  See RFC 1952
+  for more details on the meanings of these fields.
+*/
+typedef struct gz_header_s {
+    int     text;       /* true if compressed data believed to be text */
+    uLong   time;       /* modification time */
+    int     xflags;     /* extra flags (not used when writing a gzip file) */
+    int     os;         /* operating system */
+    Bytef   *extra;     /* pointer to extra field or Z_NULL if none */
+    uInt    extra_len;  /* extra field length (valid if extra != Z_NULL) */
+    uInt    extra_max;  /* space at extra (only when reading header) */
+    Bytef   *name;      /* pointer to zero-terminated file name or Z_NULL */
+    uInt    name_max;   /* space at name (only when reading header) */
+    Bytef   *comment;   /* pointer to zero-terminated comment or Z_NULL */
+    uInt    comm_max;   /* space at comment (only when reading header) */
+    int     hcrc;       /* true if there was or will be a header crc */
+    int     done;       /* true when done reading gzip header (not used
+                           when writing a gzip file) */
+} gz_header;
+
+typedef gz_header FAR *gz_headerp;
+
+/*
+     The application must update next_in and avail_in when avail_in has dropped
+   to zero.  It must update next_out and avail_out when avail_out has dropped
+   to zero.  The application must initialize zalloc, zfree and opaque before
+   calling the init function.  All other fields are set by the compression
+   library and must not be updated by the application.
+
+     The opaque value provided by the application will be passed as the first
+   parameter for calls of zalloc and zfree.  This can be useful for custom
+   memory management.  The compression library attaches no meaning to the
+   opaque value.
+
+     zalloc must return Z_NULL if there is not enough memory for the object.
+   If zlib is used in a multi-threaded application, zalloc and zfree must be
+   thread safe.
+
+     On 16-bit systems, the functions zalloc and zfree must be able to allocate
+   exactly 65536 bytes, but will not be required to allocate more than this if
+   the symbol MAXSEG_64K is defined (see zconf.h).  WARNING: On MSDOS, pointers
+   returned by zalloc for objects of exactly 65536 bytes *must* have their
+   offset normalized to zero.  The default allocation function provided by this
+   library ensures this (see zutil.c).  To reduce memory requirements and avoid
+   any allocation of 64K objects, at the expense of compression ratio, compile
+   the library with -DMAX_WBITS=14 (see zconf.h).
+
+     The fields total_in and total_out can be used for statistics or progress
+   reports.  After compression, total_in holds the total size of the
+   uncompressed data and may be saved for use in the decompressor (particularly
+   if the decompressor wants to decompress everything in a single step).
+*/
+
+                        /* constants */
+
+#define Z_NO_FLUSH      0
+#define Z_PARTIAL_FLUSH 1
+#define Z_SYNC_FLUSH    2
+#define Z_FULL_FLUSH    3
+#define Z_FINISH        4
+#define Z_BLOCK         5
+#define Z_TREES         6
+/* Allowed flush values; see deflate() and inflate() below for details */
+
+#define Z_OK            0
+#define Z_STREAM_END    1
+#define Z_NEED_DICT     2
+#define Z_ERRNO        (-1)
+#define Z_STREAM_ERROR (-2)
+#define Z_DATA_ERROR   (-3)
+#define Z_MEM_ERROR    (-4)
+#define Z_BUF_ERROR    (-5)
+#define Z_VERSION_ERROR (-6)
+/* Return codes for the compression/decompression functions. Negative values
+ * are errors, positive values are used for special but normal events.
+ */
+
+#define Z_NO_COMPRESSION         0
+#define Z_BEST_SPEED             1
+#define Z_BEST_COMPRESSION       9
+#define Z_DEFAULT_COMPRESSION  (-1)
+/* compression levels */
+
+#define Z_FILTERED            1
+#define Z_HUFFMAN_ONLY        2
+#define Z_RLE                 3
+#define Z_FIXED               4
+#define Z_DEFAULT_STRATEGY    0
+/* compression strategy; see deflateInit2() below for details */
+
+#define Z_BINARY   0
+#define Z_TEXT     1
+#define Z_ASCII    Z_TEXT   /* for compatibility with 1.2.2 and earlier */
+#define Z_UNKNOWN  2
+/* Possible values of the data_type field (though see inflate()) */
+
+#define Z_DEFLATED   8
+/* The deflate compression method (the only one supported in this version) */
+
+#define Z_NULL  0  /* for initializing zalloc, zfree, opaque */
+
+#define zlib_version zlibVersion()
+/* for compatibility with versions < 1.0.2 */
+
+
+                        /* basic functions */
+
+ZEXTERN const char * ZEXPORT zlibVersion OF((void));
+/* The application can compare zlibVersion and ZLIB_VERSION for consistency.
+   If the first character differs, the library code actually used is not
+   compatible with the zlib.h header file used by the application.  This check
+   is automatically made by deflateInit and inflateInit.
+ */
+
+/*
+ZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level));
+
+     Initializes the internal stream state for compression.  The fields
+   zalloc, zfree and opaque must be initialized before by the caller.  If
+   zalloc and zfree are set to Z_NULL, deflateInit updates them to use default
+   allocation functions.
+
+     The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9:
+   1 gives best speed, 9 gives best compression, 0 gives no compression at all
+   (the input data is simply copied a block at a time).  Z_DEFAULT_COMPRESSION
+   requests a default compromise between speed and compression (currently
+   equivalent to level 6).
+
+     deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough
+   memory, Z_STREAM_ERROR if level is not a valid compression level, or
+   Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible
+   with the version assumed by the caller (ZLIB_VERSION).  msg is set to null
+   if there is no error message.  deflateInit does not perform any compression:
+   this will be done by deflate().
+*/
+
+
+ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush));
+/*
+    deflate compresses as much data as possible, and stops when the input
+  buffer becomes empty or the output buffer becomes full.  It may introduce
+  some output latency (reading input without producing any output) except when
+  forced to flush.
+
+    The detailed semantics are as follows.  deflate performs one or both of the
+  following actions:
+
+  - Compress more input starting at next_in and update next_in and avail_in
+    accordingly.  If not all input can be processed (because there is not
+    enough room in the output buffer), next_in and avail_in are updated and
+    processing will resume at this point for the next call of deflate().
+
+  - Provide more output starting at next_out and update next_out and avail_out
+    accordingly.  This action is forced if the parameter flush is non zero.
+    Forcing flush frequently degrades the compression ratio, so this parameter
+    should be set only when necessary (in interactive applications).  Some
+    output may be provided even if flush is not set.
+
+    Before the call of deflate(), the application should ensure that at least
+  one of the actions is possible, by providing more input and/or consuming more
+  output, and updating avail_in or avail_out accordingly; avail_out should
+  never be zero before the call.  The application can consume the compressed
+  output when it wants, for example when the output buffer is full (avail_out
+  == 0), or after each call of deflate().  If deflate returns Z_OK and with
+  zero avail_out, it must be called again after making room in the output
+  buffer because there might be more output pending.
+
+    Normally the parameter flush is set to Z_NO_FLUSH, which allows deflate to
+  decide how much data to accumulate before producing output, in order to
+  maximize compression.
+
+    If the parameter flush is set to Z_SYNC_FLUSH, all pending output is
+  flushed to the output buffer and the output is aligned on a byte boundary, so
+  that the decompressor can get all input data available so far.  (In
+  particular avail_in is zero after the call if enough output space has been
+  provided before the call.) Flushing may degrade compression for some
+  compression algorithms and so it should be used only when necessary.  This
+  completes the current deflate block and follows it with an empty stored block
+  that is three bits plus filler bits to the next byte, followed by four bytes
+  (00 00 ff ff).
+
+    If flush is set to Z_PARTIAL_FLUSH, all pending output is flushed to the
+  output buffer, but the output is not aligned to a byte boundary.  All of the
+  input data so far will be available to the decompressor, as for Z_SYNC_FLUSH.
+  This completes the current deflate block and follows it with an empty fixed
+  codes block that is 10 bits long.  This assures that enough bytes are output
+  in order for the decompressor to finish the block before the empty fixed code
+  block.
+
+    If flush is set to Z_BLOCK, a deflate block is completed and emitted, as
+  for Z_SYNC_FLUSH, but the output is not aligned on a byte boundary, and up to
+  seven bits of the current block are held to be written as the next byte after
+  the next deflate block is completed.  In this case, the decompressor may not
+  be provided enough bits at this point in order to complete decompression of
+  the data provided so far to the compressor.  It may need to wait for the next
+  block to be emitted.  This is for advanced applications that need to control
+  the emission of deflate blocks.
+
+    If flush is set to Z_FULL_FLUSH, all output is flushed as with
+  Z_SYNC_FLUSH, and the compression state is reset so that decompression can
+  restart from this point if previous compressed data has been damaged or if
+  random access is desired.  Using Z_FULL_FLUSH too often can seriously degrade
+  compression.
+
+    If deflate returns with avail_out == 0, this function must be called again
+  with the same value of the flush parameter and more output space (updated
+  avail_out), until the flush is complete (deflate returns with non-zero
+  avail_out).  In the case of a Z_FULL_FLUSH or Z_SYNC_FLUSH, make sure that
+  avail_out is greater than six to avoid repeated flush markers due to
+  avail_out == 0 on return.
+
+    If the parameter flush is set to Z_FINISH, pending input is processed,
+  pending output is flushed and deflate returns with Z_STREAM_END if there was
+  enough output space; if deflate returns with Z_OK, this function must be
+  called again with Z_FINISH and more output space (updated avail_out) but no
+  more input data, until it returns with Z_STREAM_END or an error.  After
+  deflate has returned Z_STREAM_END, the only possible operations on the stream
+  are deflateReset or deflateEnd.
+
+    Z_FINISH can be used immediately after deflateInit if all the compression
+  is to be done in a single step.  In this case, avail_out must be at least the
+  value returned by deflateBound (see below).  Then deflate is guaranteed to
+  return Z_STREAM_END.  If not enough output space is provided, deflate will
+  not return Z_STREAM_END, and it must be called again as described above.
+
+    deflate() sets strm->adler to the adler32 checksum of all input read
+  so far (that is, total_in bytes).
+
+    deflate() may update strm->data_type if it can make a good guess about
+  the input data type (Z_BINARY or Z_TEXT).  In doubt, the data is considered
+  binary.  This field is only for information purposes and does not affect the
+  compression algorithm in any manner.
+
+    deflate() returns Z_OK if some progress has been made (more input
+  processed or more output produced), Z_STREAM_END if all input has been
+  consumed and all output has been produced (only when flush is set to
+  Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example
+  if next_in or next_out was Z_NULL), Z_BUF_ERROR if no progress is possible
+  (for example avail_in or avail_out was zero).  Note that Z_BUF_ERROR is not
+  fatal, and deflate() can be called again with more input and more output
+  space to continue compressing.
+*/
+
+
+ZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm));
+/*
+     All dynamically allocated data structures for this stream are freed.
+   This function discards any unprocessed input and does not flush any pending
+   output.
+
+     deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the
+   stream state was inconsistent, Z_DATA_ERROR if the stream was freed
+   prematurely (some input or output was discarded).  In the error case, msg
+   may be set but then points to a static string (which must not be
+   deallocated).
+*/
+
+
+/*
+ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm));
+
+     Initializes the internal stream state for decompression.  The fields
+   next_in, avail_in, zalloc, zfree and opaque must be initialized before by
+   the caller.  If next_in is not Z_NULL and avail_in is large enough (the
+   exact value depends on the compression method), inflateInit determines the
+   compression method from the zlib header and allocates all data structures
+   accordingly; otherwise the allocation will be deferred to the first call of
+   inflate.  If zalloc and zfree are set to Z_NULL, inflateInit updates them to
+   use default allocation functions.
+
+     inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough
+   memory, Z_VERSION_ERROR if the zlib library version is incompatible with the
+   version assumed by the caller, or Z_STREAM_ERROR if the parameters are
+   invalid, such as a null pointer to the structure.  msg is set to null if
+   there is no error message.  inflateInit does not perform any decompression
+   apart from possibly reading the zlib header if present: actual decompression
+   will be done by inflate().  (So next_in and avail_in may be modified, but
+   next_out and avail_out are unused and unchanged.) The current implementation
+   of inflateInit() does not process any header information -- that is deferred
+   until inflate() is called.
+*/
+
+
+ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush));
+/*
+    inflate decompresses as much data as possible, and stops when the input
+  buffer becomes empty or the output buffer becomes full.  It may introduce
+  some output latency (reading input without producing any output) except when
+  forced to flush.
+
+  The detailed semantics are as follows.  inflate performs one or both of the
+  following actions:
+
+  - Decompress more input starting at next_in and update next_in and avail_in
+    accordingly.  If not all input can be processed (because there is not
+    enough room in the output buffer), next_in is updated and processing will
+    resume at this point for the next call of inflate().
+
+  - Provide more output starting at next_out and update next_out and avail_out
+    accordingly.  inflate() provides as much output as possible, until there is
+    no more input data or no more space in the output buffer (see below about
+    the flush parameter).
+
+    Before the call of inflate(), the application should ensure that at least
+  one of the actions is possible, by providing more input and/or consuming more
+  output, and updating the next_* and avail_* values accordingly.  The
+  application can consume the uncompressed output when it wants, for example
+  when the output buffer is full (avail_out == 0), or after each call of
+  inflate().  If inflate returns Z_OK and with zero avail_out, it must be
+  called again after making room in the output buffer because there might be
+  more output pending.
+
+    The flush parameter of inflate() can be Z_NO_FLUSH, Z_SYNC_FLUSH, Z_FINISH,
+  Z_BLOCK, or Z_TREES.  Z_SYNC_FLUSH requests that inflate() flush as much
+  output as possible to the output buffer.  Z_BLOCK requests that inflate()
+  stop if and when it gets to the next deflate block boundary.  When decoding
+  the zlib or gzip format, this will cause inflate() to return immediately
+  after the header and before the first block.  When doing a raw inflate,
+  inflate() will go ahead and process the first block, and will return when it
+  gets to the end of that block, or when it runs out of data.
+
+    The Z_BLOCK option assists in appending to or combining deflate streams.
+  Also to assist in this, on return inflate() will set strm->data_type to the
+  number of unused bits in the last byte taken from strm->next_in, plus 64 if
+  inflate() is currently decoding the last block in the deflate stream, plus
+  128 if inflate() returned immediately after decoding an end-of-block code or
+  decoding the complete header up to just before the first byte of the deflate
+  stream.  The end-of-block will not be indicated until all of the uncompressed
+  data from that block has been written to strm->next_out.  The number of
+  unused bits may in general be greater than seven, except when bit 7 of
+  data_type is set, in which case the number of unused bits will be less than
+  eight.  data_type is set as noted here every time inflate() returns for all
+  flush options, and so can be used to determine the amount of currently
+  consumed input in bits.
+
+    The Z_TREES option behaves as Z_BLOCK does, but it also returns when the
+  end of each deflate block header is reached, before any actual data in that
+  block is decoded.  This allows the caller to determine the length of the
+  deflate block header for later use in random access within a deflate block.
+  256 is added to the value of strm->data_type when inflate() returns
+  immediately after reaching the end of the deflate block header.
+
+    inflate() should normally be called until it returns Z_STREAM_END or an
+  error.  However if all decompression is to be performed in a single step (a
+  single call of inflate), the parameter flush should be set to Z_FINISH.  In
+  this case all pending input is processed and all pending output is flushed;
+  avail_out must be large enough to hold all of the uncompressed data for the
+  operation to complete.  (The size of the uncompressed data may have been
+  saved by the compressor for this purpose.) The use of Z_FINISH is not
+  required to perform an inflation in one step.  However it may be used to
+  inform inflate that a faster approach can be used for the single inflate()
+  call.  Z_FINISH also informs inflate to not maintain a sliding window if the
+  stream completes, which reduces inflate's memory footprint.  If the stream
+  does not complete, either because not all of the stream is provided or not
+  enough output space is provided, then a sliding window will be allocated and
+  inflate() can be called again to continue the operation as if Z_NO_FLUSH had
+  been used.
+
+     In this implementation, inflate() always flushes as much output as
+  possible to the output buffer, and always uses the faster approach on the
+  first call.  So the effects of the flush parameter in this implementation are
+  on the return value of inflate() as noted below, when inflate() returns early
+  when Z_BLOCK or Z_TREES is used, and when inflate() avoids the allocation of
+  memory for a sliding window when Z_FINISH is used.
+
+     If a preset dictionary is needed after this call (see inflateSetDictionary
+  below), inflate sets strm->adler to the Adler-32 checksum of the dictionary
+  chosen by the compressor and returns Z_NEED_DICT; otherwise it sets
+  strm->adler to the Adler-32 checksum of all output produced so far (that is,
+  total_out bytes) and returns Z_OK, Z_STREAM_END or an error code as described
+  below.  At the end of the stream, inflate() checks that its computed adler32
+  checksum is equal to that saved by the compressor and returns Z_STREAM_END
+  only if the checksum is correct.
+
+    inflate() can decompress and check either zlib-wrapped or gzip-wrapped
+  deflate data.  The header type is detected automatically, if requested when
+  initializing with inflateInit2().  Any information contained in the gzip
+  header is not retained, so applications that need that information should
+  instead use raw inflate, see inflateInit2() below, or inflateBack() and
+  perform their own processing of the gzip header and trailer.  When processing
+  gzip-wrapped deflate data, strm->adler32 is set to the CRC-32 of the output
+  producted so far.  The CRC-32 is checked against the gzip trailer.
+
+    inflate() returns Z_OK if some progress has been made (more input processed
+  or more output produced), Z_STREAM_END if the end of the compressed data has
+  been reached and all uncompressed output has been produced, Z_NEED_DICT if a
+  preset dictionary is needed at this point, Z_DATA_ERROR if the input data was
+  corrupted (input stream not conforming to the zlib format or incorrect check
+  value), Z_STREAM_ERROR if the stream structure was inconsistent (for example
+  next_in or next_out was Z_NULL), Z_MEM_ERROR if there was not enough memory,
+  Z_BUF_ERROR if no progress is possible or if there was not enough room in the
+  output buffer when Z_FINISH is used.  Note that Z_BUF_ERROR is not fatal, and
+  inflate() can be called again with more input and more output space to
+  continue decompressing.  If Z_DATA_ERROR is returned, the application may
+  then call inflateSync() to look for a good compression block if a partial
+  recovery of the data is desired.
+*/
+
+
+ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm));
+/*
+     All dynamically allocated data structures for this stream are freed.
+   This function discards any unprocessed input and does not flush any pending
+   output.
+
+     inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state
+   was inconsistent.  In the error case, msg may be set but then points to a
+   static string (which must not be deallocated).
+*/
+
+
+                        /* Advanced functions */
+
+/*
+    The following functions are needed only in some special applications.
+*/
+
+/*
+ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm,
+                                     int  level,
+                                     int  method,
+                                     int  windowBits,
+                                     int  memLevel,
+                                     int  strategy));
+
+     This is another version of deflateInit with more compression options.  The
+   fields next_in, zalloc, zfree and opaque must be initialized before by the
+   caller.
+
+     The method parameter is the compression method.  It must be Z_DEFLATED in
+   this version of the library.
+
+     The windowBits parameter is the base two logarithm of the window size
+   (the size of the history buffer).  It should be in the range 8..15 for this
+   version of the library.  Larger values of this parameter result in better
+   compression at the expense of memory usage.  The default value is 15 if
+   deflateInit is used instead.
+
+     windowBits can also be -8..-15 for raw deflate.  In this case, -windowBits
+   determines the window size.  deflate() will then generate raw deflate data
+   with no zlib header or trailer, and will not compute an adler32 check value.
+
+     windowBits can also be greater than 15 for optional gzip encoding.  Add
+   16 to windowBits to write a simple gzip header and trailer around the
+   compressed data instead of a zlib wrapper.  The gzip header will have no
+   file name, no extra data, no comment, no modification time (set to zero), no
+   header crc, and the operating system will be set to 255 (unknown).  If a
+   gzip stream is being written, strm->adler is a crc32 instead of an adler32.
+
+     The memLevel parameter specifies how much memory should be allocated
+   for the internal compression state.  memLevel=1 uses minimum memory but is
+   slow and reduces compression ratio; memLevel=9 uses maximum memory for
+   optimal speed.  The default value is 8.  See zconf.h for total memory usage
+   as a function of windowBits and memLevel.
+
+     The strategy parameter is used to tune the compression algorithm.  Use the
+   value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a
+   filter (or predictor), Z_HUFFMAN_ONLY to force Huffman encoding only (no
+   string match), or Z_RLE to limit match distances to one (run-length
+   encoding).  Filtered data consists mostly of small values with a somewhat
+   random distribution.  In this case, the compression algorithm is tuned to
+   compress them better.  The effect of Z_FILTERED is to force more Huffman
+   coding and less string matching; it is somewhat intermediate between
+   Z_DEFAULT_STRATEGY and Z_HUFFMAN_ONLY.  Z_RLE is designed to be almost as
+   fast as Z_HUFFMAN_ONLY, but give better compression for PNG image data.  The
+   strategy parameter only affects the compression ratio but not the
+   correctness of the compressed output even if it is not set appropriately.
+   Z_FIXED prevents the use of dynamic Huffman codes, allowing for a simpler
+   decoder for special applications.
+
+     deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
+   memory, Z_STREAM_ERROR if any parameter is invalid (such as an invalid
+   method), or Z_VERSION_ERROR if the zlib library version (zlib_version) is
+   incompatible with the version assumed by the caller (ZLIB_VERSION).  msg is
+   set to null if there is no error message.  deflateInit2 does not perform any
+   compression: this will be done by deflate().
+*/
+
+ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm,
+                                             const Bytef *dictionary,
+                                             uInt  dictLength));
+/*
+     Initializes the compression dictionary from the given byte sequence
+   without producing any compressed output.  When using the zlib format, this
+   function must be called immediately after deflateInit, deflateInit2 or
+   deflateReset, and before any call of deflate.  When doing raw deflate, this
+   function must be called either before any call of deflate, or immediately
+   after the completion of a deflate block, i.e. after all input has been
+   consumed and all output has been delivered when using any of the flush
+   options Z_BLOCK, Z_PARTIAL_FLUSH, Z_SYNC_FLUSH, or Z_FULL_FLUSH.  The
+   compressor and decompressor must use exactly the same dictionary (see
+   inflateSetDictionary).
+
+     The dictionary should consist of strings (byte sequences) that are likely
+   to be encountered later in the data to be compressed, with the most commonly
+   used strings preferably put towards the end of the dictionary.  Using a
+   dictionary is most useful when the data to be compressed is short and can be
+   predicted with good accuracy; the data can then be compressed better than
+   with the default empty dictionary.
+
+     Depending on the size of the compression data structures selected by
+   deflateInit or deflateInit2, a part of the dictionary may in effect be
+   discarded, for example if the dictionary is larger than the window size
+   provided in deflateInit or deflateInit2.  Thus the strings most likely to be
+   useful should be put at the end of the dictionary, not at the front.  In
+   addition, the current implementation of deflate will use at most the window
+   size minus 262 bytes of the provided dictionary.
+
+     Upon return of this function, strm->adler is set to the adler32 value
+   of the dictionary; the decompressor may later use this value to determine
+   which dictionary has been used by the compressor.  (The adler32 value
+   applies to the whole dictionary even if only a subset of the dictionary is
+   actually used by the compressor.) If a raw deflate was requested, then the
+   adler32 value is not computed and strm->adler is not set.
+
+     deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a
+   parameter is invalid (e.g.  dictionary being Z_NULL) or the stream state is
+   inconsistent (for example if deflate has already been called for this stream
+   or if not at a block boundary for raw deflate).  deflateSetDictionary does
+   not perform any compression: this will be done by deflate().
+*/
+
+ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest,
+                                    z_streamp source));
+/*
+     Sets the destination stream as a complete copy of the source stream.
+
+     This function can be useful when several compression strategies will be
+   tried, for example when there are several ways of pre-processing the input
+   data with a filter.  The streams that will be discarded should then be freed
+   by calling deflateEnd.  Note that deflateCopy duplicates the internal
+   compression state which can be quite large, so this strategy is slow and can
+   consume lots of memory.
+
+     deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not
+   enough memory, Z_STREAM_ERROR if the source stream state was inconsistent
+   (such as zalloc being Z_NULL).  msg is left unchanged in both source and
+   destination.
+*/
+
+ZEXTERN int ZEXPORT deflateReset OF((z_streamp strm));
+/*
+     This function is equivalent to deflateEnd followed by deflateInit,
+   but does not free and reallocate all the internal compression state.  The
+   stream will keep the same compression level and any other attributes that
+   may have been set by deflateInit2.
+
+     deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source
+   stream state was inconsistent (such as zalloc or state being Z_NULL).
+*/
+
+ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm,
+                                      int level,
+                                      int strategy));
+/*
+     Dynamically update the compression level and compression strategy.  The
+   interpretation of level and strategy is as in deflateInit2.  This can be
+   used to switch between compression and straight copy of the input data, or
+   to switch to a different kind of input data requiring a different strategy.
+   If the compression level is changed, the input available so far is
+   compressed with the old level (and may be flushed); the new level will take
+   effect only at the next call of deflate().
+
+     Before the call of deflateParams, the stream state must be set as for
+   a call of deflate(), since the currently available input may have to be
+   compressed and flushed.  In particular, strm->avail_out must be non-zero.
+
+     deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source
+   stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR if
+   strm->avail_out was zero.
+*/
+
+ZEXTERN int ZEXPORT deflateTune OF((z_streamp strm,
+                                    int good_length,
+                                    int max_lazy,
+                                    int nice_length,
+                                    int max_chain));
+/*
+     Fine tune deflate's internal compression parameters.  This should only be
+   used by someone who understands the algorithm used by zlib's deflate for
+   searching for the best matching string, and even then only by the most
+   fanatic optimizer trying to squeeze out the last compressed bit for their
+   specific input data.  Read the deflate.c source code for the meaning of the
+   max_lazy, good_length, nice_length, and max_chain parameters.
+
+     deflateTune() can be called after deflateInit() or deflateInit2(), and
+   returns Z_OK on success, or Z_STREAM_ERROR for an invalid deflate stream.
+ */
+
+ZEXTERN uLong ZEXPORT deflateBound OF((z_streamp strm,
+                                       uLong sourceLen));
+/*
+     deflateBound() returns an upper bound on the compressed size after
+   deflation of sourceLen bytes.  It must be called after deflateInit() or
+   deflateInit2(), and after deflateSetHeader(), if used.  This would be used
+   to allocate an output buffer for deflation in a single pass, and so would be
+   called before deflate().  If that first deflate() call is provided the
+   sourceLen input bytes, an output buffer allocated to the size returned by
+   deflateBound(), and the flush value Z_FINISH, then deflate() is guaranteed
+   to return Z_STREAM_END.  Note that it is possible for the compressed size to
+   be larger than the value returned by deflateBound() if flush options other
+   than Z_FINISH or Z_NO_FLUSH are used.
+*/
+
+ZEXTERN int ZEXPORT deflatePending OF((z_streamp strm,
+                                       unsigned *pending,
+                                       int *bits));
+/*
+     deflatePending() returns the number of bytes and bits of output that have
+   been generated, but not yet provided in the available output.  The bytes not
+   provided would be due to the available output space having being consumed.
+   The number of bits of output not provided are between 0 and 7, where they
+   await more bits to join them in order to fill out a full byte.  If pending
+   or bits are Z_NULL, then those values are not set.
+
+     deflatePending returns Z_OK if success, or Z_STREAM_ERROR if the source
+   stream state was inconsistent.
+ */
+
+ZEXTERN int ZEXPORT deflatePrime OF((z_streamp strm,
+                                     int bits,
+                                     int value));
+/*
+     deflatePrime() inserts bits in the deflate output stream.  The intent
+   is that this function is used to start off the deflate output with the bits
+   leftover from a previous deflate stream when appending to it.  As such, this
+   function can only be used for raw deflate, and must be used before the first
+   deflate() call after a deflateInit2() or deflateReset().  bits must be less
+   than or equal to 16, and that many of the least significant bits of value
+   will be inserted in the output.
+
+     deflatePrime returns Z_OK if success, Z_BUF_ERROR if there was not enough
+   room in the internal buffer to insert the bits, or Z_STREAM_ERROR if the
+   source stream state was inconsistent.
+*/
+
+ZEXTERN int ZEXPORT deflateSetHeader OF((z_streamp strm,
+                                         gz_headerp head));
+/*
+     deflateSetHeader() provides gzip header information for when a gzip
+   stream is requested by deflateInit2().  deflateSetHeader() may be called
+   after deflateInit2() or deflateReset() and before the first call of
+   deflate().  The text, time, os, extra field, name, and comment information
+   in the provided gz_header structure are written to the gzip header (xflag is
+   ignored -- the extra flags are set according to the compression level).  The
+   caller must assure that, if not Z_NULL, name and comment are terminated with
+   a zero byte, and that if extra is not Z_NULL, that extra_len bytes are
+   available there.  If hcrc is true, a gzip header crc is included.  Note that
+   the current versions of the command-line version of gzip (up through version
+   1.3.x) do not support header crc's, and will report that it is a "multi-part
+   gzip file" and give up.
+
+     If deflateSetHeader is not used, the default gzip header has text false,
+   the time set to zero, and os set to 255, with no extra, name, or comment
+   fields.  The gzip header is returned to the default state by deflateReset().
+
+     deflateSetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source
+   stream state was inconsistent.
+*/
+
+/*
+ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm,
+                                     int  windowBits));
+
+     This is another version of inflateInit with an extra parameter.  The
+   fields next_in, avail_in, zalloc, zfree and opaque must be initialized
+   before by the caller.
+
+     The windowBits parameter is the base two logarithm of the maximum window
+   size (the size of the history buffer).  It should be in the range 8..15 for
+   this version of the library.  The default value is 15 if inflateInit is used
+   instead.  windowBits must be greater than or equal to the windowBits value
+   provided to deflateInit2() while compressing, or it must be equal to 15 if
+   deflateInit2() was not used.  If a compressed stream with a larger window
+   size is given as input, inflate() will return with the error code
+   Z_DATA_ERROR instead of trying to allocate a larger window.
+
+     windowBits can also be zero to request that inflate use the window size in
+   the zlib header of the compressed stream.
+
+     windowBits can also be -8..-15 for raw inflate.  In this case, -windowBits
+   determines the window size.  inflate() will then process raw deflate data,
+   not looking for a zlib or gzip header, not generating a check value, and not
+   looking for any check values for comparison at the end of the stream.  This
+   is for use with other formats that use the deflate compressed data format
+   such as zip.  Those formats provide their own check values.  If a custom
+   format is developed using the raw deflate format for compressed data, it is
+   recommended that a check value such as an adler32 or a crc32 be applied to
+   the uncompressed data as is done in the zlib, gzip, and zip formats.  For
+   most applications, the zlib format should be used as is.  Note that comments
+   above on the use in deflateInit2() applies to the magnitude of windowBits.
+
+     windowBits can also be greater than 15 for optional gzip decoding.  Add
+   32 to windowBits to enable zlib and gzip decoding with automatic header
+   detection, or add 16 to decode only the gzip format (the zlib format will
+   return a Z_DATA_ERROR).  If a gzip stream is being decoded, strm->adler is a
+   crc32 instead of an adler32.
+
+     inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
+   memory, Z_VERSION_ERROR if the zlib library version is incompatible with the
+   version assumed by the caller, or Z_STREAM_ERROR if the parameters are
+   invalid, such as a null pointer to the structure.  msg is set to null if
+   there is no error message.  inflateInit2 does not perform any decompression
+   apart from possibly reading the zlib header if present: actual decompression
+   will be done by inflate().  (So next_in and avail_in may be modified, but
+   next_out and avail_out are unused and unchanged.) The current implementation
+   of inflateInit2() does not process any header information -- that is
+   deferred until inflate() is called.
+*/
+
+ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm,
+                                             const Bytef *dictionary,
+                                             uInt  dictLength));
+/*
+     Initializes the decompression dictionary from the given uncompressed byte
+   sequence.  This function must be called immediately after a call of inflate,
+   if that call returned Z_NEED_DICT.  The dictionary chosen by the compressor
+   can be determined from the adler32 value returned by that call of inflate.
+   The compressor and decompressor must use exactly the same dictionary (see
+   deflateSetDictionary).  For raw inflate, this function can be called at any
+   time to set the dictionary.  If the provided dictionary is smaller than the
+   window and there is already data in the window, then the provided dictionary
+   will amend what's there.  The application must insure that the dictionary
+   that was used for compression is provided.
+
+     inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a
+   parameter is invalid (e.g.  dictionary being Z_NULL) or the stream state is
+   inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the
+   expected one (incorrect adler32 value).  inflateSetDictionary does not
+   perform any decompression: this will be done by subsequent calls of
+   inflate().
+*/
+
+ZEXTERN int ZEXPORT inflateGetDictionary OF((z_streamp strm,
+                                             Bytef *dictionary,
+                                             uInt  *dictLength));
+/*
+     Returns the sliding dictionary being maintained by inflate.  dictLength is
+   set to the number of bytes in the dictionary, and that many bytes are copied
+   to dictionary.  dictionary must have enough space, where 32768 bytes is
+   always enough.  If inflateGetDictionary() is called with dictionary equal to
+   Z_NULL, then only the dictionary length is returned, and nothing is copied.
+   Similary, if dictLength is Z_NULL, then it is not set.
+
+     inflateGetDictionary returns Z_OK on success, or Z_STREAM_ERROR if the
+   stream state is inconsistent.
+*/
+
+ZEXTERN int ZEXPORT inflateSync OF((z_streamp strm));
+/*
+     Skips invalid compressed data until a possible full flush point (see above
+   for the description of deflate with Z_FULL_FLUSH) can be found, or until all
+   available input is skipped.  No output is provided.
+
+     inflateSync searches for a 00 00 FF FF pattern in the compressed data.
+   All full flush points have this pattern, but not all occurrences of this
+   pattern are full flush points.
+
+     inflateSync returns Z_OK if a possible full flush point has been found,
+   Z_BUF_ERROR if no more input was provided, Z_DATA_ERROR if no flush point
+   has been found, or Z_STREAM_ERROR if the stream structure was inconsistent.
+   In the success case, the application may save the current current value of
+   total_in which indicates where valid compressed data was found.  In the
+   error case, the application may repeatedly call inflateSync, providing more
+   input each time, until success or end of the input data.
+*/
+
+ZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest,
+                                    z_streamp source));
+/*
+     Sets the destination stream as a complete copy of the source stream.
+
+     This function can be useful when randomly accessing a large stream.  The
+   first pass through the stream can periodically record the inflate state,
+   allowing restarting inflate at those points when randomly accessing the
+   stream.
+
+     inflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not
+   enough memory, Z_STREAM_ERROR if the source stream state was inconsistent
+   (such as zalloc being Z_NULL).  msg is left unchanged in both source and
+   destination.
+*/
+
+ZEXTERN int ZEXPORT inflateReset OF((z_streamp strm));
+/*
+     This function is equivalent to inflateEnd followed by inflateInit,
+   but does not free and reallocate all the internal decompression state.  The
+   stream will keep attributes that may have been set by inflateInit2.
+
+     inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source
+   stream state was inconsistent (such as zalloc or state being Z_NULL).
+*/
+
+ZEXTERN int ZEXPORT inflateReset2 OF((z_streamp strm,
+                                      int windowBits));
+/*
+     This function is the same as inflateReset, but it also permits changing
+   the wrap and window size requests.  The windowBits parameter is interpreted
+   the same as it is for inflateInit2.
+
+     inflateReset2 returns Z_OK if success, or Z_STREAM_ERROR if the source
+   stream state was inconsistent (such as zalloc or state being Z_NULL), or if
+   the windowBits parameter is invalid.
+*/
+
+ZEXTERN int ZEXPORT inflatePrime OF((z_streamp strm,
+                                     int bits,
+                                     int value));
+/*
+     This function inserts bits in the inflate input stream.  The intent is
+   that this function is used to start inflating at a bit position in the
+   middle of a byte.  The provided bits will be used before any bytes are used
+   from next_in.  This function should only be used with raw inflate, and
+   should be used before the first inflate() call after inflateInit2() or
+   inflateReset().  bits must be less than or equal to 16, and that many of the
+   least significant bits of value will be inserted in the input.
+
+     If bits is negative, then the input stream bit buffer is emptied.  Then
+   inflatePrime() can be called again to put bits in the buffer.  This is used
+   to clear out bits leftover after feeding inflate a block description prior
+   to feeding inflate codes.
+
+     inflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source
+   stream state was inconsistent.
+*/
+
+ZEXTERN long ZEXPORT inflateMark OF((z_streamp strm));
+/*
+     This function returns two values, one in the lower 16 bits of the return
+   value, and the other in the remaining upper bits, obtained by shifting the
+   return value down 16 bits.  If the upper value is -1 and the lower value is
+   zero, then inflate() is currently decoding information outside of a block.
+   If the upper value is -1 and the lower value is non-zero, then inflate is in
+   the middle of a stored block, with the lower value equaling the number of
+   bytes from the input remaining to copy.  If the upper value is not -1, then
+   it is the number of bits back from the current bit position in the input of
+   the code (literal or length/distance pair) currently being processed.  In
+   that case the lower value is the number of bytes already emitted for that
+   code.
+
+     A code is being processed if inflate is waiting for more input to complete
+   decoding of the code, or if it has completed decoding but is waiting for
+   more output space to write the literal or match data.
+
+     inflateMark() is used to mark locations in the input data for random
+   access, which may be at bit positions, and to note those cases where the
+   output of a code may span boundaries of random access blocks.  The current
+   location in the input stream can be determined from avail_in and data_type
+   as noted in the description for the Z_BLOCK flush parameter for inflate.
+
+     inflateMark returns the value noted above or -1 << 16 if the provided
+   source stream state was inconsistent.
+*/
+
+ZEXTERN int ZEXPORT inflateGetHeader OF((z_streamp strm,
+                                         gz_headerp head));
+/*
+     inflateGetHeader() requests that gzip header information be stored in the
+   provided gz_header structure.  inflateGetHeader() may be called after
+   inflateInit2() or inflateReset(), and before the first call of inflate().
+   As inflate() processes the gzip stream, head->done is zero until the header
+   is completed, at which time head->done is set to one.  If a zlib stream is
+   being decoded, then head->done is set to -1 to indicate that there will be
+   no gzip header information forthcoming.  Note that Z_BLOCK or Z_TREES can be
+   used to force inflate() to return immediately after header processing is
+   complete and before any actual data is decompressed.
+
+     The text, time, xflags, and os fields are filled in with the gzip header
+   contents.  hcrc is set to true if there is a header CRC.  (The header CRC
+   was valid if done is set to one.) If extra is not Z_NULL, then extra_max
+   contains the maximum number of bytes to write to extra.  Once done is true,
+   extra_len contains the actual extra field length, and extra contains the
+   extra field, or that field truncated if extra_max is less than extra_len.
+   If name is not Z_NULL, then up to name_max characters are written there,
+   terminated with a zero unless the length is greater than name_max.  If
+   comment is not Z_NULL, then up to comm_max characters are written there,
+   terminated with a zero unless the length is greater than comm_max.  When any
+   of extra, name, or comment are not Z_NULL and the respective field is not
+   present in the header, then that field is set to Z_NULL to signal its
+   absence.  This allows the use of deflateSetHeader() with the returned
+   structure to duplicate the header.  However if those fields are set to
+   allocated memory, then the application will need to save those pointers
+   elsewhere so that they can be eventually freed.
+
+     If inflateGetHeader is not used, then the header information is simply
+   discarded.  The header is always checked for validity, including the header
+   CRC if present.  inflateReset() will reset the process to discard the header
+   information.  The application would need to call inflateGetHeader() again to
+   retrieve the header from the next gzip stream.
+
+     inflateGetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source
+   stream state was inconsistent.
+*/
+
+/*
+ZEXTERN int ZEXPORT inflateBackInit OF((z_streamp strm, int windowBits,
+                                        unsigned char FAR *window));
+
+     Initialize the internal stream state for decompression using inflateBack()
+   calls.  The fields zalloc, zfree and opaque in strm must be initialized
+   before the call.  If zalloc and zfree are Z_NULL, then the default library-
+   derived memory allocation routines are used.  windowBits is the base two
+   logarithm of the window size, in the range 8..15.  window is a caller
+   supplied buffer of that size.  Except for special applications where it is
+   assured that deflate was used with small window sizes, windowBits must be 15
+   and a 32K byte window must be supplied to be able to decompress general
+   deflate streams.
+
+     See inflateBack() for the usage of these routines.
+
+     inflateBackInit will return Z_OK on success, Z_STREAM_ERROR if any of
+   the parameters are invalid, Z_MEM_ERROR if the internal state could not be
+   allocated, or Z_VERSION_ERROR if the version of the library does not match
+   the version of the header file.
+*/
+
+typedef unsigned (*in_func) OF((void FAR *,
+                                z_const unsigned char FAR * FAR *));
+typedef int (*out_func) OF((void FAR *, unsigned char FAR *, unsigned));
+
+ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm,
+                                    in_func in, void FAR *in_desc,
+                                    out_func out, void FAR *out_desc));
+/*
+     inflateBack() does a raw inflate with a single call using a call-back
+   interface for input and output.  This is potentially more efficient than
+   inflate() for file i/o applications, in that it avoids copying between the
+   output and the sliding window by simply making the window itself the output
+   buffer.  inflate() can be faster on modern CPUs when used with large
+   buffers.  inflateBack() trusts the application to not change the output
+   buffer passed by the output function, at least until inflateBack() returns.
+
+     inflateBackInit() must be called first to allocate the internal state
+   and to initialize the state with the user-provided window buffer.
+   inflateBack() may then be used multiple times to inflate a complete, raw
+   deflate stream with each call.  inflateBackEnd() is then called to free the
+   allocated state.
+
+     A raw deflate stream is one with no zlib or gzip header or trailer.
+   This routine would normally be used in a utility that reads zip or gzip
+   files and writes out uncompressed files.  The utility would decode the
+   header and process the trailer on its own, hence this routine expects only
+   the raw deflate stream to decompress.  This is different from the normal
+   behavior of inflate(), which expects either a zlib or gzip header and
+   trailer around the deflate stream.
+
+     inflateBack() uses two subroutines supplied by the caller that are then
+   called by inflateBack() for input and output.  inflateBack() calls those
+   routines until it reads a complete deflate stream and writes out all of the
+   uncompressed data, or until it encounters an error.  The function's
+   parameters and return types are defined above in the in_func and out_func
+   typedefs.  inflateBack() will call in(in_desc, &buf) which should return the
+   number of bytes of provided input, and a pointer to that input in buf.  If
+   there is no input available, in() must return zero--buf is ignored in that
+   case--and inflateBack() will return a buffer error.  inflateBack() will call
+   out(out_desc, buf, len) to write the uncompressed data buf[0..len-1].  out()
+   should return zero on success, or non-zero on failure.  If out() returns
+   non-zero, inflateBack() will return with an error.  Neither in() nor out()
+   are permitted to change the contents of the window provided to
+   inflateBackInit(), which is also the buffer that out() uses to write from.
+   The length written by out() will be at most the window size.  Any non-zero
+   amount of input may be provided by in().
+
+     For convenience, inflateBack() can be provided input on the first call by
+   setting strm->next_in and strm->avail_in.  If that input is exhausted, then
+   in() will be called.  Therefore strm->next_in must be initialized before
+   calling inflateBack().  If strm->next_in is Z_NULL, then in() will be called
+   immediately for input.  If strm->next_in is not Z_NULL, then strm->avail_in
+   must also be initialized, and then if strm->avail_in is not zero, input will
+   initially be taken from strm->next_in[0 ..  strm->avail_in - 1].
+
+     The in_desc and out_desc parameters of inflateBack() is passed as the
+   first parameter of in() and out() respectively when they are called.  These
+   descriptors can be optionally used to pass any information that the caller-
+   supplied in() and out() functions need to do their job.
+
+     On return, inflateBack() will set strm->next_in and strm->avail_in to
+   pass back any unused input that was provided by the last in() call.  The
+   return values of inflateBack() can be Z_STREAM_END on success, Z_BUF_ERROR
+   if in() or out() returned an error, Z_DATA_ERROR if there was a format error
+   in the deflate stream (in which case strm->msg is set to indicate the nature
+   of the error), or Z_STREAM_ERROR if the stream was not properly initialized.
+   In the case of Z_BUF_ERROR, an input or output error can be distinguished
+   using strm->next_in which will be Z_NULL only if in() returned an error.  If
+   strm->next_in is not Z_NULL, then the Z_BUF_ERROR was due to out() returning
+   non-zero.  (in() will always be called before out(), so strm->next_in is
+   assured to be defined if out() returns non-zero.) Note that inflateBack()
+   cannot return Z_OK.
+*/
+
+ZEXTERN int ZEXPORT inflateBackEnd OF((z_streamp strm));
+/*
+     All memory allocated by inflateBackInit() is freed.
+
+     inflateBackEnd() returns Z_OK on success, or Z_STREAM_ERROR if the stream
+   state was inconsistent.
+*/
+
+ZEXTERN uLong ZEXPORT zlibCompileFlags OF((void));
+/* Return flags indicating compile-time options.
+
+    Type sizes, two bits each, 00 = 16 bits, 01 = 32, 10 = 64, 11 = other:
+     1.0: size of uInt
+     3.2: size of uLong
+     5.4: size of voidpf (pointer)
+     7.6: size of z_off_t
+
+    Compiler, assembler, and debug options:
+     8: DEBUG
+     9: ASMV or ASMINF -- use ASM code
+     10: ZLIB_WINAPI -- exported functions use the WINAPI calling convention
+     11: 0 (reserved)
+
+    One-time table building (smaller code, but not thread-safe if true):
+     12: BUILDFIXED -- build static block decoding tables when needed
+     13: DYNAMIC_CRC_TABLE -- build CRC calculation tables when needed
+     14,15: 0 (reserved)
+
+    Library content (indicates missing functionality):
+     16: NO_GZCOMPRESS -- gz* functions cannot compress (to avoid linking
+                          deflate code when not needed)
+     17: NO_GZIP -- deflate can't write gzip streams, and inflate can't detect
+                    and decode gzip streams (to avoid linking crc code)
+     18-19: 0 (reserved)
+
+    Operation variations (changes in library functionality):
+     20: PKZIP_BUG_WORKAROUND -- slightly more permissive inflate
+     21: FASTEST -- deflate algorithm with only one, lowest compression level
+     22,23: 0 (reserved)
+
+    The sprintf variant used by gzprintf (zero is best):
+     24: 0 = vs*, 1 = s* -- 1 means limited to 20 arguments after the format
+     25: 0 = *nprintf, 1 = *printf -- 1 means gzprintf() not secure!
+     26: 0 = returns value, 1 = void -- 1 means inferred string length returned
+
+    Remainder:
+     27-31: 0 (reserved)
+ */
+
+#ifndef Z_SOLO
+
+                        /* utility functions */
+
+/*
+     The following utility functions are implemented on top of the basic
+   stream-oriented functions.  To simplify the interface, some default options
+   are assumed (compression level and memory usage, standard memory allocation
+   functions).  The source code of these utility functions can be modified if
+   you need special options.
+*/
+
+ZEXTERN int ZEXPORT compress OF((Bytef *dest,   uLongf *destLen,
+                                 const Bytef *source, uLong sourceLen));
+/*
+     Compresses the source buffer into the destination buffer.  sourceLen is
+   the byte length of the source buffer.  Upon entry, destLen is the total size
+   of the destination buffer, which must be at least the value returned by
+   compressBound(sourceLen).  Upon exit, destLen is the actual size of the
+   compressed buffer.
+
+     compress returns Z_OK if success, Z_MEM_ERROR if there was not
+   enough memory, Z_BUF_ERROR if there was not enough room in the output
+   buffer.
+*/
+
+ZEXTERN int ZEXPORT compress2 OF((Bytef *dest,   uLongf *destLen,
+                                  const Bytef *source, uLong sourceLen,
+                                  int level));
+/*
+     Compresses the source buffer into the destination buffer.  The level
+   parameter has the same meaning as in deflateInit.  sourceLen is the byte
+   length of the source buffer.  Upon entry, destLen is the total size of the
+   destination buffer, which must be at least the value returned by
+   compressBound(sourceLen).  Upon exit, destLen is the actual size of the
+   compressed buffer.
+
+     compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
+   memory, Z_BUF_ERROR if there was not enough room in the output buffer,
+   Z_STREAM_ERROR if the level parameter is invalid.
+*/
+
+ZEXTERN uLong ZEXPORT compressBound OF((uLong sourceLen));
+/*
+     compressBound() returns an upper bound on the compressed size after
+   compress() or compress2() on sourceLen bytes.  It would be used before a
+   compress() or compress2() call to allocate the destination buffer.
+*/
+
+ZEXTERN int ZEXPORT uncompress OF((Bytef *dest,   uLongf *destLen,
+                                   const Bytef *source, uLong sourceLen));
+/*
+     Decompresses the source buffer into the destination buffer.  sourceLen is
+   the byte length of the source buffer.  Upon entry, destLen is the total size
+   of the destination buffer, which must be large enough to hold the entire
+   uncompressed data.  (The size of the uncompressed data must have been saved
+   previously by the compressor and transmitted to the decompressor by some
+   mechanism outside the scope of this compression library.) Upon exit, destLen
+   is the actual size of the uncompressed buffer.
+
+     uncompress returns Z_OK if success, Z_MEM_ERROR if there was not
+   enough memory, Z_BUF_ERROR if there was not enough room in the output
+   buffer, or Z_DATA_ERROR if the input data was corrupted or incomplete.  In
+   the case where there is not enough room, uncompress() will fill the output
+   buffer with the uncompressed data up to that point.
+*/
+
+                        /* gzip file access functions */
+
+/*
+     This library supports reading and writing files in gzip (.gz) format with
+   an interface similar to that of stdio, using the functions that start with
+   "gz".  The gzip format is different from the zlib format.  gzip is a gzip
+   wrapper, documented in RFC 1952, wrapped around a deflate stream.
+*/
+
+typedef struct gzFile_s *gzFile;    /* semi-opaque gzip file descriptor */
+
+/*
+ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode));
+
+     Opens a gzip (.gz) file for reading or writing.  The mode parameter is as
+   in fopen ("rb" or "wb") but can also include a compression level ("wb9") or
+   a strategy: 'f' for filtered data as in "wb6f", 'h' for Huffman-only
+   compression as in "wb1h", 'R' for run-length encoding as in "wb1R", or 'F'
+   for fixed code compression as in "wb9F".  (See the description of
+   deflateInit2 for more information about the strategy parameter.)  'T' will
+   request transparent writing or appending with no compression and not using
+   the gzip format.
+
+     "a" can be used instead of "w" to request that the gzip stream that will
+   be written be appended to the file.  "+" will result in an error, since
+   reading and writing to the same gzip file is not supported.  The addition of
+   "x" when writing will create the file exclusively, which fails if the file
+   already exists.  On systems that support it, the addition of "e" when
+   reading or writing will set the flag to close the file on an execve() call.
+
+     These functions, as well as gzip, will read and decode a sequence of gzip
+   streams in a file.  The append function of gzopen() can be used to create
+   such a file.  (Also see gzflush() for another way to do this.)  When
+   appending, gzopen does not test whether the file begins with a gzip stream,
+   nor does it look for the end of the gzip streams to begin appending.  gzopen
+   will simply append a gzip stream to the existing file.
+
+     gzopen can be used to read a file which is not in gzip format; in this
+   case gzread will directly read from the file without decompression.  When
+   reading, this will be detected automatically by looking for the magic two-
+   byte gzip header.
+
+     gzopen returns NULL if the file could not be opened, if there was
+   insufficient memory to allocate the gzFile state, or if an invalid mode was
+   specified (an 'r', 'w', or 'a' was not provided, or '+' was provided).
+   errno can be checked to determine if the reason gzopen failed was that the
+   file could not be opened.
+*/
+
+ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode));
+/*
+     gzdopen associates a gzFile with the file descriptor fd.  File descriptors
+   are obtained from calls like open, dup, creat, pipe or fileno (if the file
+   has been previously opened with fopen).  The mode parameter is as in gzopen.
+
+     The next call of gzclose on the returned gzFile will also close the file
+   descriptor fd, just like fclose(fdopen(fd, mode)) closes the file descriptor
+   fd.  If you want to keep fd open, use fd = dup(fd_keep); gz = gzdopen(fd,
+   mode);.  The duplicated descriptor should be saved to avoid a leak, since
+   gzdopen does not close fd if it fails.  If you are using fileno() to get the
+   file descriptor from a FILE *, then you will have to use dup() to avoid
+   double-close()ing the file descriptor.  Both gzclose() and fclose() will
+   close the associated file descriptor, so they need to have different file
+   descriptors.
+
+     gzdopen returns NULL if there was insufficient memory to allocate the
+   gzFile state, if an invalid mode was specified (an 'r', 'w', or 'a' was not
+   provided, or '+' was provided), or if fd is -1.  The file descriptor is not
+   used until the next gz* read, write, seek, or close operation, so gzdopen
+   will not detect if fd is invalid (unless fd is -1).
+*/
+
+ZEXTERN int ZEXPORT gzbuffer OF((gzFile file, unsigned size));
+/*
+     Set the internal buffer size used by this library's functions.  The
+   default buffer size is 8192 bytes.  This function must be called after
+   gzopen() or gzdopen(), and before any other calls that read or write the
+   file.  The buffer memory allocation is always deferred to the first read or
+   write.  Two buffers are allocated, either both of the specified size when
+   writing, or one of the specified size and the other twice that size when
+   reading.  A larger buffer size of, for example, 64K or 128K bytes will
+   noticeably increase the speed of decompression (reading).
+
+     The new buffer size also affects the maximum length for gzprintf().
+
+     gzbuffer() returns 0 on success, or -1 on failure, such as being called
+   too late.
+*/
+
+ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy));
+/*
+     Dynamically update the compression level or strategy.  See the description
+   of deflateInit2 for the meaning of these parameters.
+
+     gzsetparams returns Z_OK if success, or Z_STREAM_ERROR if the file was not
+   opened for writing.
+*/
+
+ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len));
+/*
+     Reads the given number of uncompressed bytes from the compressed file.  If
+   the input file is not in gzip format, gzread copies the given number of
+   bytes into the buffer directly from the file.
+
+     After reaching the end of a gzip stream in the input, gzread will continue
+   to read, looking for another gzip stream.  Any number of gzip streams may be
+   concatenated in the input file, and will all be decompressed by gzread().
+   If something other than a gzip stream is encountered after a gzip stream,
+   that remaining trailing garbage is ignored (and no error is returned).
+
+     gzread can be used to read a gzip file that is being concurrently written.
+   Upon reaching the end of the input, gzread will return with the available
+   data.  If the error code returned by gzerror is Z_OK or Z_BUF_ERROR, then
+   gzclearerr can be used to clear the end of file indicator in order to permit
+   gzread to be tried again.  Z_OK indicates that a gzip stream was completed
+   on the last gzread.  Z_BUF_ERROR indicates that the input file ended in the
+   middle of a gzip stream.  Note that gzread does not return -1 in the event
+   of an incomplete gzip stream.  This error is deferred until gzclose(), which
+   will return Z_BUF_ERROR if the last gzread ended in the middle of a gzip
+   stream.  Alternatively, gzerror can be used before gzclose to detect this
+   case.
+
+     gzread returns the number of uncompressed bytes actually read, less than
+   len for end of file, or -1 for error.
+*/
+
+ZEXTERN int ZEXPORT gzwrite OF((gzFile file,
+                                voidpc buf, unsigned len));
+/*
+     Writes the given number of uncompressed bytes into the compressed file.
+   gzwrite returns the number of uncompressed bytes written or 0 in case of
+   error.
+*/
+
+ZEXTERN int ZEXPORTVA gzprintf Z_ARG((gzFile file, const char *format, ...));
+/*
+     Converts, formats, and writes the arguments to the compressed file under
+   control of the format string, as in fprintf.  gzprintf returns the number of
+   uncompressed bytes actually written, or 0 in case of error.  The number of
+   uncompressed bytes written is limited to 8191, or one less than the buffer
+   size given to gzbuffer().  The caller should assure that this limit is not
+   exceeded.  If it is exceeded, then gzprintf() will return an error (0) with
+   nothing written.  In this case, there may also be a buffer overflow with
+   unpredictable consequences, which is possible only if zlib was compiled with
+   the insecure functions sprintf() or vsprintf() because the secure snprintf()
+   or vsnprintf() functions were not available.  This can be determined using
+   zlibCompileFlags().
+*/
+
+ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s));
+/*
+     Writes the given null-terminated string to the compressed file, excluding
+   the terminating null character.
+
+     gzputs returns the number of characters written, or -1 in case of error.
+*/
+
+ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len));
+/*
+     Reads bytes from the compressed file until len-1 characters are read, or a
+   newline character is read and transferred to buf, or an end-of-file
+   condition is encountered.  If any characters are read or if len == 1, the
+   string is terminated with a null character.  If no characters are read due
+   to an end-of-file or len < 1, then the buffer is left untouched.
+
+     gzgets returns buf which is a null-terminated string, or it returns NULL
+   for end-of-file or in case of error.  If there was an error, the contents at
+   buf are indeterminate.
+*/
+
+ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c));
+/*
+     Writes c, converted to an unsigned char, into the compressed file.  gzputc
+   returns the value that was written, or -1 in case of error.
+*/
+
+ZEXTERN int ZEXPORT gzgetc OF((gzFile file));
+/*
+     Reads one byte from the compressed file.  gzgetc returns this byte or -1
+   in case of end of file or error.  This is implemented as a macro for speed.
+   As such, it does not do all of the checking the other functions do.  I.e.
+   it does not check to see if file is NULL, nor whether the structure file
+   points to has been clobbered or not.
+*/
+
+ZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file));
+/*
+     Push one character back onto the stream to be read as the first character
+   on the next read.  At least one character of push-back is allowed.
+   gzungetc() returns the character pushed, or -1 on failure.  gzungetc() will
+   fail if c is -1, and may fail if a character has been pushed but not read
+   yet.  If gzungetc is used immediately after gzopen or gzdopen, at least the
+   output buffer size of pushed characters is allowed.  (See gzbuffer above.)
+   The pushed character will be discarded if the stream is repositioned with
+   gzseek() or gzrewind().
+*/
+
+ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush));
+/*
+     Flushes all pending output into the compressed file.  The parameter flush
+   is as in the deflate() function.  The return value is the zlib error number
+   (see function gzerror below).  gzflush is only permitted when writing.
+
+     If the flush parameter is Z_FINISH, the remaining data is written and the
+   gzip stream is completed in the output.  If gzwrite() is called again, a new
+   gzip stream will be started in the output.  gzread() is able to read such
+   concatented gzip streams.
+
+     gzflush should be called only when strictly necessary because it will
+   degrade compression if called too often.
+*/
+
+/*
+ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file,
+                                   z_off_t offset, int whence));
+
+     Sets the starting position for the next gzread or gzwrite on the given
+   compressed file.  The offset represents a number of bytes in the
+   uncompressed data stream.  The whence parameter is defined as in lseek(2);
+   the value SEEK_END is not supported.
+
+     If the file is opened for reading, this function is emulated but can be
+   extremely slow.  If the file is opened for writing, only forward seeks are
+   supported; gzseek then compresses a sequence of zeroes up to the new
+   starting position.
+
+     gzseek returns the resulting offset location as measured in bytes from
+   the beginning of the uncompressed stream, or -1 in case of error, in
+   particular if the file is opened for writing and the new starting position
+   would be before the current position.
+*/
+
+ZEXTERN int ZEXPORT    gzrewind OF((gzFile file));
+/*
+     Rewinds the given file. This function is supported only for reading.
+
+     gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET)
+*/
+
+/*
+ZEXTERN z_off_t ZEXPORT    gztell OF((gzFile file));
+
+     Returns the starting position for the next gzread or gzwrite on the given
+   compressed file.  This position represents a number of bytes in the
+   uncompressed data stream, and is zero when starting, even if appending or
+   reading a gzip stream from the middle of a file using gzdopen().
+
+     gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR)
+*/
+
+/*
+ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile file));
+
+     Returns the current offset in the file being read or written.  This offset
+   includes the count of bytes that precede the gzip stream, for example when
+   appending or when using gzdopen() for reading.  When reading, the offset
+   does not include as yet unused buffered input.  This information can be used
+   for a progress indicator.  On error, gzoffset() returns -1.
+*/
+
+ZEXTERN int ZEXPORT gzeof OF((gzFile file));
+/*
+     Returns true (1) if the end-of-file indicator has been set while reading,
+   false (0) otherwise.  Note that the end-of-file indicator is set only if the
+   read tried to go past the end of the input, but came up short.  Therefore,
+   just like feof(), gzeof() may return false even if there is no more data to
+   read, in the event that the last read request was for the exact number of
+   bytes remaining in the input file.  This will happen if the input file size
+   is an exact multiple of the buffer size.
+
+     If gzeof() returns true, then the read functions will return no more data,
+   unless the end-of-file indicator is reset by gzclearerr() and the input file
+   has grown since the previous end of file was detected.
+*/
+
+ZEXTERN int ZEXPORT gzdirect OF((gzFile file));
+/*
+     Returns true (1) if file is being copied directly while reading, or false
+   (0) if file is a gzip stream being decompressed.
+
+     If the input file is empty, gzdirect() will return true, since the input
+   does not contain a gzip stream.
+
+     If gzdirect() is used immediately after gzopen() or gzdopen() it will
+   cause buffers to be allocated to allow reading the file to determine if it
+   is a gzip file.  Therefore if gzbuffer() is used, it should be called before
+   gzdirect().
+
+     When writing, gzdirect() returns true (1) if transparent writing was
+   requested ("wT" for the gzopen() mode), or false (0) otherwise.  (Note:
+   gzdirect() is not needed when writing.  Transparent writing must be
+   explicitly requested, so the application already knows the answer.  When
+   linking statically, using gzdirect() will include all of the zlib code for
+   gzip file reading and decompression, which may not be desired.)
+*/
+
+ZEXTERN int ZEXPORT    gzclose OF((gzFile file));
+/*
+     Flushes all pending output if necessary, closes the compressed file and
+   deallocates the (de)compression state.  Note that once file is closed, you
+   cannot call gzerror with file, since its structures have been deallocated.
+   gzclose must not be called more than once on the same file, just as free
+   must not be called more than once on the same allocation.
+
+     gzclose will return Z_STREAM_ERROR if file is not valid, Z_ERRNO on a
+   file operation error, Z_MEM_ERROR if out of memory, Z_BUF_ERROR if the
+   last read ended in the middle of a gzip stream, or Z_OK on success.
+*/
+
+ZEXTERN int ZEXPORT gzclose_r OF((gzFile file));
+ZEXTERN int ZEXPORT gzclose_w OF((gzFile file));
+/*
+     Same as gzclose(), but gzclose_r() is only for use when reading, and
+   gzclose_w() is only for use when writing or appending.  The advantage to
+   using these instead of gzclose() is that they avoid linking in zlib
+   compression or decompression code that is not used when only reading or only
+   writing respectively.  If gzclose() is used, then both compression and
+   decompression code will be included the application when linking to a static
+   zlib library.
+*/
+
+ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum));
+/*
+     Returns the error message for the last error which occurred on the given
+   compressed file.  errnum is set to zlib error number.  If an error occurred
+   in the file system and not in the compression library, errnum is set to
+   Z_ERRNO and the application may consult errno to get the exact error code.
+
+     The application must not modify the returned string.  Future calls to
+   this function may invalidate the previously returned string.  If file is
+   closed, then the string previously returned by gzerror will no longer be
+   available.
+
+     gzerror() should be used to distinguish errors from end-of-file for those
+   functions above that do not distinguish those cases in their return values.
+*/
+
+ZEXTERN void ZEXPORT gzclearerr OF((gzFile file));
+/*
+     Clears the error and end-of-file flags for file.  This is analogous to the
+   clearerr() function in stdio.  This is useful for continuing to read a gzip
+   file that is being written concurrently.
+*/
+
+#endif /* !Z_SOLO */
+
+                        /* checksum functions */
+
+/*
+     These functions are not related to compression but are exported
+   anyway because they might be useful in applications using the compression
+   library.
+*/
+
+ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len));
+/*
+     Update a running Adler-32 checksum with the bytes buf[0..len-1] and
+   return the updated checksum.  If buf is Z_NULL, this function returns the
+   required initial value for the checksum.
+
+     An Adler-32 checksum is almost as reliable as a CRC32 but can be computed
+   much faster.
+
+   Usage example:
+
+     uLong adler = adler32(0L, Z_NULL, 0);
+
+     while (read_buffer(buffer, length) != EOF) {
+       adler = adler32(adler, buffer, length);
+     }
+     if (adler != original_adler) error();
+*/
+
+/*
+ZEXTERN uLong ZEXPORT adler32_combine OF((uLong adler1, uLong adler2,
+                                          z_off_t len2));
+
+     Combine two Adler-32 checksums into one.  For two sequences of bytes, seq1
+   and seq2 with lengths len1 and len2, Adler-32 checksums were calculated for
+   each, adler1 and adler2.  adler32_combine() returns the Adler-32 checksum of
+   seq1 and seq2 concatenated, requiring only adler1, adler2, and len2.  Note
+   that the z_off_t type (like off_t) is a signed integer.  If len2 is
+   negative, the result has no meaning or utility.
+*/
+
+ZEXTERN uLong ZEXPORT crc32   OF((uLong crc, const Bytef *buf, uInt len));
+/*
+     Update a running CRC-32 with the bytes buf[0..len-1] and return the
+   updated CRC-32.  If buf is Z_NULL, this function returns the required
+   initial value for the crc.  Pre- and post-conditioning (one's complement) is
+   performed within this function so it shouldn't be done by the application.
+
+   Usage example:
+
+     uLong crc = crc32(0L, Z_NULL, 0);
+
+     while (read_buffer(buffer, length) != EOF) {
+       crc = crc32(crc, buffer, length);
+     }
+     if (crc != original_crc) error();
+*/
+
+/*
+ZEXTERN uLong ZEXPORT crc32_combine OF((uLong crc1, uLong crc2, z_off_t len2));
+
+     Combine two CRC-32 check values into one.  For two sequences of bytes,
+   seq1 and seq2 with lengths len1 and len2, CRC-32 check values were
+   calculated for each, crc1 and crc2.  crc32_combine() returns the CRC-32
+   check value of seq1 and seq2 concatenated, requiring only crc1, crc2, and
+   len2.
+*/
+
+
+                        /* various hacks, don't look :) */
+
+/* deflateInit and inflateInit are macros to allow checking the zlib version
+ * and the compiler's view of z_stream:
+ */
+ZEXTERN int ZEXPORT deflateInit_ OF((z_streamp strm, int level,
+                                     const char *version, int stream_size));
+ZEXTERN int ZEXPORT inflateInit_ OF((z_streamp strm,
+                                     const char *version, int stream_size));
+ZEXTERN int ZEXPORT deflateInit2_ OF((z_streamp strm, int  level, int  method,
+                                      int windowBits, int memLevel,
+                                      int strategy, const char *version,
+                                      int stream_size));
+ZEXTERN int ZEXPORT inflateInit2_ OF((z_streamp strm, int  windowBits,
+                                      const char *version, int stream_size));
+ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits,
+                                         unsigned char FAR *window,
+                                         const char *version,
+                                         int stream_size));
+#define deflateInit(strm, level) \
+        deflateInit_((strm), (level), ZLIB_VERSION, (int)sizeof(z_stream))
+#define inflateInit(strm) \
+        inflateInit_((strm), ZLIB_VERSION, (int)sizeof(z_stream))
+#define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \
+        deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\
+                      (strategy), ZLIB_VERSION, (int)sizeof(z_stream))
+#define inflateInit2(strm, windowBits) \
+        inflateInit2_((strm), (windowBits), ZLIB_VERSION, \
+                      (int)sizeof(z_stream))
+#define inflateBackInit(strm, windowBits, window) \
+        inflateBackInit_((strm), (windowBits), (window), \
+                      ZLIB_VERSION, (int)sizeof(z_stream))
+
+#ifndef Z_SOLO
+
+/* gzgetc() macro and its supporting function and exposed data structure.  Note
+ * that the real internal state is much larger than the exposed structure.
+ * This abbreviated structure exposes just enough for the gzgetc() macro.  The
+ * user should not mess with these exposed elements, since their names or
+ * behavior could change in the future, perhaps even capriciously.  They can
+ * only be used by the gzgetc() macro.  You have been warned.
+ */
+struct gzFile_s {
+    unsigned have;
+    unsigned char *next;
+    z_off64_t pos;
+};
+ZEXTERN int ZEXPORT gzgetc_ OF((gzFile file));  /* backward compatibility */
+#ifdef Z_PREFIX_SET
+#  undef z_gzgetc
+#  define z_gzgetc(g) \
+          ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : gzgetc(g))
+#else
+#  define gzgetc(g) \
+          ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : gzgetc(g))
+#endif
+
+/* provide 64-bit offset functions if _LARGEFILE64_SOURCE defined, and/or
+ * change the regular functions to 64 bits if _FILE_OFFSET_BITS is 64 (if
+ * both are true, the application gets the *64 functions, and the regular
+ * functions are changed to 64 bits) -- in case these are set on systems
+ * without large file support, _LFS64_LARGEFILE must also be true
+ */
+#ifdef Z_LARGE64
+   ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *));
+   ZEXTERN z_off64_t ZEXPORT gzseek64 OF((gzFile, z_off64_t, int));
+   ZEXTERN z_off64_t ZEXPORT gztell64 OF((gzFile));
+   ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile));
+   ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off64_t));
+   ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off64_t));
+#endif
+
+#if !defined(ZLIB_INTERNAL) && defined(Z_WANT64)
+#  ifdef Z_PREFIX_SET
+#    define z_gzopen z_gzopen64
+#    define z_gzseek z_gzseek64
+#    define z_gztell z_gztell64
+#    define z_gzoffset z_gzoffset64
+#    define z_adler32_combine z_adler32_combine64
+#    define z_crc32_combine z_crc32_combine64
+#  else
+#    define gzopen gzopen64
+#    define gzseek gzseek64
+#    define gztell gztell64
+#    define gzoffset gzoffset64
+#    define adler32_combine adler32_combine64
+#    define crc32_combine crc32_combine64
+#  endif
+#  ifndef Z_LARGE64
+     ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *));
+     ZEXTERN z_off_t ZEXPORT gzseek64 OF((gzFile, z_off_t, int));
+     ZEXTERN z_off_t ZEXPORT gztell64 OF((gzFile));
+     ZEXTERN z_off_t ZEXPORT gzoffset64 OF((gzFile));
+     ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t));
+     ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t));
+#  endif
+#else
+   ZEXTERN gzFile ZEXPORT gzopen OF((const char *, const char *));
+   ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile, z_off_t, int));
+   ZEXTERN z_off_t ZEXPORT gztell OF((gzFile));
+   ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile));
+   ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t));
+   ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t));
+#endif
+
+#else /* Z_SOLO */
+
+   ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t));
+   ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t));
+
+#endif /* !Z_SOLO */
+
+/* hack for buggy compilers */
+#if !defined(ZUTIL_H) && !defined(NO_DUMMY_DECL)
+    struct internal_state {int dummy;};
+#endif
+
+/* undocumented functions */
+ZEXTERN const char   * ZEXPORT zError           OF((int));
+ZEXTERN int            ZEXPORT inflateSyncPoint OF((z_streamp));
+ZEXTERN const z_crc_t FAR * ZEXPORT get_crc_table    OF((void));
+ZEXTERN int            ZEXPORT inflateUndermine OF((z_streamp, int));
+ZEXTERN int            ZEXPORT inflateResetKeep OF((z_streamp));
+ZEXTERN int            ZEXPORT deflateResetKeep OF((z_streamp));
+#if defined(_WIN32) && !defined(Z_SOLO)
+ZEXTERN gzFile         ZEXPORT gzopen_w OF((const wchar_t *path,
+                                            const char *mode));
+#endif
+#if defined(STDC) || defined(Z_HAVE_STDARG_H)
+#  ifndef Z_SOLO
+ZEXTERN int            ZEXPORTVA gzvprintf Z_ARG((gzFile file,
+                                                  const char *format,
+                                                  va_list va));
+#  endif
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ZLIB_H */
diff --git a/privatemodules/nc4/lib/libhdf5.a b/privatemodules/nc4/lib/libhdf5.a
new file mode 100644
index 0000000000000000000000000000000000000000..b2a59016fa92fa3d6f0e43c17f26f3c51fda6bec
Binary files /dev/null and b/privatemodules/nc4/lib/libhdf5.a differ
diff --git a/privatemodules/nc4/lib/libhdf5.la b/privatemodules/nc4/lib/libhdf5.la
new file mode 100755
index 0000000000000000000000000000000000000000..030a7508f01412440eb0bd77cf26750e02901545
--- /dev/null
+++ b/privatemodules/nc4/lib/libhdf5.la
@@ -0,0 +1,41 @@
+# libhdf5.la - a libtool library file
+# Generated by libtool (GNU libtool) 2.4.2
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# The name that we can dlopen(3).
+dlname='libhdf5.so.8'
+
+# Names of this library.
+library_names='libhdf5.so.8.0.2 libhdf5.so.8 libhdf5.so'
+
+# The name of the static archive.
+old_library='libhdf5.a'
+
+# Linker flags that can not go in dependency_libs.
+inherited_linker_flags=''
+
+# Libraries that this one depends upon.
+dependency_libs=' -L/home/erikvs/privatemodules/nc4/lib -lz -ldl -lm'
+
+# Names of additional weak libraries provided by this library
+weak_library_names=''
+
+# Version information for libhdf5.
+current=8
+age=0
+revision=2
+
+# Is this an already installed library?
+installed=yes
+
+# Should we warn about portability when linking against -modules?
+shouldnotlink=no
+
+# Files to dlopen/dlpreopen
+dlopen=''
+dlpreopen=''
+
+# Directory that this library needs to be installed in:
+libdir='/home/erikvs/privatemodules/nc4/lib'
diff --git a/privatemodules/nc4/lib/libhdf5.settings b/privatemodules/nc4/lib/libhdf5.settings
new file mode 100644
index 0000000000000000000000000000000000000000..5b1e958abe3aac71137fb9d6adcca19c9a051945
--- /dev/null
+++ b/privatemodules/nc4/lib/libhdf5.settings
@@ -0,0 +1,61 @@
+	    SUMMARY OF THE HDF5 CONFIGURATION
+	    =================================
+
+General Information:
+-------------------
+		   HDF5 Version: 1.8.13
+		  Configured on: Tue Nov 28 10:29:11 CET 2017
+		  Configured by: erikvs@int2.bullx
+		 Configure mode: production
+		    Host system: x86_64-unknown-linux-gnu
+	      Uname information: Linux int2.bullx 3.10.0-693.5.2.el7.x86_64 #1 SMP Fri Oct 13 10:46:25 EDT 2017 x86_64 x86_64 x86_64 GNU/Linux
+		       Byte sex: little-endian
+		      Libraries: static, shared
+	     Installation point: /home/erikvs/privatemodules/nc4
+
+Compiling Options:
+------------------
+               Compilation Mode: production
+                     C Compiler: /hpc/sw/modules/wrappers/surfsara/gcc ( gcc (GCC) 5.2.0)
+                         CFLAGS: -fPIC
+                      H5_CFLAGS:   -ansi -pedantic -Wall -W -Wundef -Wshadow -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wcast-align -Wwrite-strings -Wconversion -Waggregate-return -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls -Wnested-externs -Winline -O -fomit-frame-pointer -finline-functions
+                      AM_CFLAGS: 
+                       CPPFLAGS: 
+                    H5_CPPFLAGS: -D_POSIX_C_SOURCE=199506L   -DNDEBUG -UH5_DEBUG_API
+                    AM_CPPFLAGS: -I/home/erikvs/privatemodules/nc4/include -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_BSD_SOURCE 
+               Shared C Library: yes
+               Static C Library: yes
+  Statically Linked Executables: no
+                        LDFLAGS: 
+                     H5_LDFLAGS: 
+                     AM_LDFLAGS:  -L/home/erikvs/privatemodules/nc4/lib
+ 	 	Extra libraries:  -lz -ldl -lm 
+ 		       Archiver: ar
+ 		 	 Ranlib: ranlib
+ 	      Debugged Packages: 
+		    API Tracing: no
+
+Languages:
+----------
+                        Fortran: no
+
+                            C++: no
+
+Features:
+---------
+                  Parallel HDF5: no
+             High Level library: yes
+                   Threadsafety: no
+            Default API Mapping: v18
+ With Deprecated Public Symbols: yes
+         I/O filters (external): deflate(zlib)
+         I/O filters (internal): shuffle,fletcher32,nbit,scaleoffset
+                            MPE: no
+                     Direct VFD: no
+                        dmalloc: no
+Clear file buffers before write: yes
+           Using memory checker: no
+         Function Stack Tracing: no
+      Strict File Format Checks: no
+   Optimization Instrumentation: no
+       Large File Support (LFS): yes
diff --git a/privatemodules/nc4/lib/libhdf5.so b/privatemodules/nc4/lib/libhdf5.so
new file mode 100755
index 0000000000000000000000000000000000000000..b4dc94dc11882000e633d833631b7ab063367635
Binary files /dev/null and b/privatemodules/nc4/lib/libhdf5.so differ
diff --git a/privatemodules/nc4/lib/libhdf5.so.8 b/privatemodules/nc4/lib/libhdf5.so.8
new file mode 100755
index 0000000000000000000000000000000000000000..b4dc94dc11882000e633d833631b7ab063367635
Binary files /dev/null and b/privatemodules/nc4/lib/libhdf5.so.8 differ
diff --git a/privatemodules/nc4/lib/libhdf5.so.8.0.2 b/privatemodules/nc4/lib/libhdf5.so.8.0.2
new file mode 100755
index 0000000000000000000000000000000000000000..b4dc94dc11882000e633d833631b7ab063367635
Binary files /dev/null and b/privatemodules/nc4/lib/libhdf5.so.8.0.2 differ
diff --git a/privatemodules/nc4/lib/libhdf5_hl.a b/privatemodules/nc4/lib/libhdf5_hl.a
new file mode 100644
index 0000000000000000000000000000000000000000..c567ee6342d76cf0ff845a9e92f78a31e7e4a974
Binary files /dev/null and b/privatemodules/nc4/lib/libhdf5_hl.a differ
diff --git a/privatemodules/nc4/lib/libhdf5_hl.la b/privatemodules/nc4/lib/libhdf5_hl.la
new file mode 100755
index 0000000000000000000000000000000000000000..60583e3969b5dd48b72f1d8e143ac5429ba2275d
--- /dev/null
+++ b/privatemodules/nc4/lib/libhdf5_hl.la
@@ -0,0 +1,41 @@
+# libhdf5_hl.la - a libtool library file
+# Generated by libtool (GNU libtool) 2.4.2
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# The name that we can dlopen(3).
+dlname='libhdf5_hl.so.8'
+
+# Names of this library.
+library_names='libhdf5_hl.so.8.0.2 libhdf5_hl.so.8 libhdf5_hl.so'
+
+# The name of the static archive.
+old_library='libhdf5_hl.a'
+
+# Linker flags that can not go in dependency_libs.
+inherited_linker_flags=''
+
+# Libraries that this one depends upon.
+dependency_libs=' -L/home/erikvs/privatemodules/nc4/lib /home/erikvs/privatemodules/nc4/lib/libhdf5.la -lz -ldl -lm'
+
+# Names of additional weak libraries provided by this library
+weak_library_names=''
+
+# Version information for libhdf5_hl.
+current=8
+age=0
+revision=2
+
+# Is this an already installed library?
+installed=yes
+
+# Should we warn about portability when linking against -modules?
+shouldnotlink=no
+
+# Files to dlopen/dlpreopen
+dlopen=''
+dlpreopen=''
+
+# Directory that this library needs to be installed in:
+libdir='/home/erikvs/privatemodules/nc4/lib'
diff --git a/privatemodules/nc4/lib/libhdf5_hl.so b/privatemodules/nc4/lib/libhdf5_hl.so
new file mode 100755
index 0000000000000000000000000000000000000000..f31080c5ef6f477d349a77b1121c9a1e59b7d2da
Binary files /dev/null and b/privatemodules/nc4/lib/libhdf5_hl.so differ
diff --git a/privatemodules/nc4/lib/libhdf5_hl.so.8 b/privatemodules/nc4/lib/libhdf5_hl.so.8
new file mode 100755
index 0000000000000000000000000000000000000000..f31080c5ef6f477d349a77b1121c9a1e59b7d2da
Binary files /dev/null and b/privatemodules/nc4/lib/libhdf5_hl.so.8 differ
diff --git a/privatemodules/nc4/lib/libhdf5_hl.so.8.0.2 b/privatemodules/nc4/lib/libhdf5_hl.so.8.0.2
new file mode 100755
index 0000000000000000000000000000000000000000..f31080c5ef6f477d349a77b1121c9a1e59b7d2da
Binary files /dev/null and b/privatemodules/nc4/lib/libhdf5_hl.so.8.0.2 differ
diff --git a/privatemodules/nc4/lib/libnetcdf.a b/privatemodules/nc4/lib/libnetcdf.a
new file mode 100644
index 0000000000000000000000000000000000000000..b28c6a85e1e659d33282083baef131fcccd0e0f1
Binary files /dev/null and b/privatemodules/nc4/lib/libnetcdf.a differ
diff --git a/privatemodules/nc4/lib/libnetcdf.la b/privatemodules/nc4/lib/libnetcdf.la
new file mode 100755
index 0000000000000000000000000000000000000000..639041eef98404d6f59b9acfa65d592abbb0cc6a
--- /dev/null
+++ b/privatemodules/nc4/lib/libnetcdf.la
@@ -0,0 +1,41 @@
+# libnetcdf.la - a libtool library file
+# Generated by libtool (GNU libtool) 2.4.6
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# The name that we can dlopen(3).
+dlname='libnetcdf.so.11'
+
+# Names of this library.
+library_names='libnetcdf.so.11.0.4 libnetcdf.so.11 libnetcdf.so'
+
+# The name of the static archive.
+old_library='libnetcdf.a'
+
+# Linker flags that cannot go in dependency_libs.
+inherited_linker_flags=''
+
+# Libraries that this one depends upon.
+dependency_libs=' -L/home/erikvs/privatemodules/nc4/lib /home/erikvs/privatemodules/nc4/lib/libhdf5_hl.la /home/erikvs/privatemodules/nc4/lib/libhdf5.la -ldl -lm -lz -lcurl'
+
+# Names of additional weak libraries provided by this library
+weak_library_names=''
+
+# Version information for libnetcdf.
+current=11
+age=0
+revision=4
+
+# Is this an already installed library?
+installed=yes
+
+# Should we warn about portability when linking against -modules?
+shouldnotlink=no
+
+# Files to dlopen/dlpreopen
+dlopen=''
+dlpreopen=''
+
+# Directory that this library needs to be installed in:
+libdir='/home/erikvs/privatemodules/nc4/lib'
diff --git a/privatemodules/nc4/lib/libnetcdf.settings b/privatemodules/nc4/lib/libnetcdf.settings
new file mode 100644
index 0000000000000000000000000000000000000000..7503b3b967a5ed637900d30ca1d4ea9f648513e1
--- /dev/null
+++ b/privatemodules/nc4/lib/libnetcdf.settings
@@ -0,0 +1,35 @@
+# NetCDF C Configuration Summary
+==============================
+
+# General
+-------
+NetCDF Version:		4.4.1.1
+Configured On:		Tue Nov 28 10:53:10 CET 2017
+Host System:		x86_64-unknown-linux-gnu
+Build Directory: 	/scratch/shared/erikvs/test/netcdf-4.4.1.1
+Install Prefix:         /home/erikvs/privatemodules/nc4
+
+# Compiling Options
+-----------------
+C Compiler:		/hpc/sw/modules/wrappers/surfsara/gcc
+CFLAGS:			-fPIC
+CPPFLAGS:		-I/home/erikvs/privatemodules/nc4/include
+LDFLAGS:		-L/home/erikvs/privatemodules/nc4/lib
+AM_CFLAGS:		
+AM_CPPFLAGS:		
+AM_LDFLAGS:		
+Shared Library:		yes
+Static Library:		yes
+Extra libraries:	-lhdf5_hl -lhdf5 -ldl -lm -lz -lcurl 
+
+# Features
+--------
+NetCDF-2 API:		yes
+HDF4 Support:		no
+NetCDF-4 API:		yes
+NC-4 Parallel Support:	no
+PNetCDF Support:	no
+DAP Support:		yes
+Diskless Support:	yes
+MMap Support:		no
+JNA Support:		no
diff --git a/privatemodules/nc4/lib/libnetcdf.so b/privatemodules/nc4/lib/libnetcdf.so
new file mode 100755
index 0000000000000000000000000000000000000000..0ab6f2969394e155fe21017359674dc39b9f0eb9
Binary files /dev/null and b/privatemodules/nc4/lib/libnetcdf.so differ
diff --git a/privatemodules/nc4/lib/libnetcdf.so.11 b/privatemodules/nc4/lib/libnetcdf.so.11
new file mode 100755
index 0000000000000000000000000000000000000000..0ab6f2969394e155fe21017359674dc39b9f0eb9
Binary files /dev/null and b/privatemodules/nc4/lib/libnetcdf.so.11 differ
diff --git a/privatemodules/nc4/lib/libnetcdf.so.11.0.4 b/privatemodules/nc4/lib/libnetcdf.so.11.0.4
new file mode 100755
index 0000000000000000000000000000000000000000..0ab6f2969394e155fe21017359674dc39b9f0eb9
Binary files /dev/null and b/privatemodules/nc4/lib/libnetcdf.so.11.0.4 differ
diff --git a/privatemodules/nc4/lib/libnetcdff.a b/privatemodules/nc4/lib/libnetcdff.a
new file mode 100644
index 0000000000000000000000000000000000000000..cd29dde5ed4ff614f094abaa9066a4c12d3ade5b
Binary files /dev/null and b/privatemodules/nc4/lib/libnetcdff.a differ
diff --git a/privatemodules/nc4/lib/libnetcdff.la b/privatemodules/nc4/lib/libnetcdff.la
new file mode 100755
index 0000000000000000000000000000000000000000..096071bddb69845b09919ce9ec8409874dca06b7
--- /dev/null
+++ b/privatemodules/nc4/lib/libnetcdff.la
@@ -0,0 +1,41 @@
+# libnetcdff.la - a libtool library file
+# Generated by libtool (GNU libtool) 2.4.2 Debian-2.4.2-1.7ubuntu1
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# The name that we can dlopen(3).
+dlname='libnetcdff.so.6'
+
+# Names of this library.
+library_names='libnetcdff.so.6.1.1 libnetcdff.so.6 libnetcdff.so'
+
+# The name of the static archive.
+old_library='libnetcdff.a'
+
+# Linker flags that can not go in dependency_libs.
+inherited_linker_flags=''
+
+# Libraries that this one depends upon.
+dependency_libs=' -L/home/erikvs/privatemodules/nc4/lib /home/erikvs/privatemodules/nc4/lib/libnetcdf.la /home/erikvs/privatemodules/nc4/lib/libhdf5_hl.la /home/erikvs/privatemodules/nc4/lib/libhdf5.la -ldl -lm -lz -lcurl'
+
+# Names of additional weak libraries provided by this library
+weak_library_names=''
+
+# Version information for libnetcdff.
+current=7
+age=1
+revision=1
+
+# Is this an already installed library?
+installed=yes
+
+# Should we warn about portability when linking against -modules?
+shouldnotlink=no
+
+# Files to dlopen/dlpreopen
+dlopen=''
+dlpreopen=''
+
+# Directory that this library needs to be installed in:
+libdir='/home/erikvs/privatemodules/nc4/lib'
diff --git a/privatemodules/nc4/lib/libnetcdff.so b/privatemodules/nc4/lib/libnetcdff.so
new file mode 100755
index 0000000000000000000000000000000000000000..4e08944827411d51aff0d3c3388012732216b35c
Binary files /dev/null and b/privatemodules/nc4/lib/libnetcdff.so differ
diff --git a/privatemodules/nc4/lib/libnetcdff.so.6 b/privatemodules/nc4/lib/libnetcdff.so.6
new file mode 100755
index 0000000000000000000000000000000000000000..4e08944827411d51aff0d3c3388012732216b35c
Binary files /dev/null and b/privatemodules/nc4/lib/libnetcdff.so.6 differ
diff --git a/privatemodules/nc4/lib/libnetcdff.so.6.1.1 b/privatemodules/nc4/lib/libnetcdff.so.6.1.1
new file mode 100755
index 0000000000000000000000000000000000000000..4e08944827411d51aff0d3c3388012732216b35c
Binary files /dev/null and b/privatemodules/nc4/lib/libnetcdff.so.6.1.1 differ
diff --git a/privatemodules/nc4/lib/libz.a b/privatemodules/nc4/lib/libz.a
new file mode 100644
index 0000000000000000000000000000000000000000..09273da40c12aac1942ae6331db29f66b4d919c5
Binary files /dev/null and b/privatemodules/nc4/lib/libz.a differ
diff --git a/privatemodules/nc4/lib/libz.so b/privatemodules/nc4/lib/libz.so
new file mode 100755
index 0000000000000000000000000000000000000000..009096bec3b2144e243e00946e752f5f5258c3c8
Binary files /dev/null and b/privatemodules/nc4/lib/libz.so differ
diff --git a/privatemodules/nc4/lib/libz.so.1 b/privatemodules/nc4/lib/libz.so.1
new file mode 100755
index 0000000000000000000000000000000000000000..009096bec3b2144e243e00946e752f5f5258c3c8
Binary files /dev/null and b/privatemodules/nc4/lib/libz.so.1 differ
diff --git a/privatemodules/nc4/lib/libz.so.1.2.8 b/privatemodules/nc4/lib/libz.so.1.2.8
new file mode 100755
index 0000000000000000000000000000000000000000..009096bec3b2144e243e00946e752f5f5258c3c8
Binary files /dev/null and b/privatemodules/nc4/lib/libz.so.1.2.8 differ
diff --git a/privatemodules/nc4/lib/pkgconfig/netcdf-fortran.pc b/privatemodules/nc4/lib/pkgconfig/netcdf-fortran.pc
new file mode 100644
index 0000000000000000000000000000000000000000..40fb3531d5d17bd426d3326a9636ba894637a9f1
--- /dev/null
+++ b/privatemodules/nc4/lib/pkgconfig/netcdf-fortran.pc
@@ -0,0 +1,15 @@
+prefix=/home/erikvs/privatemodules/nc4
+exec_prefix=${prefix}
+libdir=${exec_prefix}/lib
+includedir=${prefix}/include
+ccompiler=gcc
+fcompiler=gfortran
+
+Name: netcdf-fortran
+Description: NetCDF Client Library for Fortran
+URL: http://www.unidata.ucar.edu/netcdf
+Version: 4.4.4
+Requires.private: netcdf > 4.1.1
+Libs: -L${libdir} -lnetcdff
+Libs.private: -L${libdir} -lnetcdff -lnetcdf
+Cflags: -I${includedir}
diff --git a/privatemodules/nc4/lib/pkgconfig/netcdf.pc b/privatemodules/nc4/lib/pkgconfig/netcdf.pc
new file mode 100644
index 0000000000000000000000000000000000000000..fb053c79c12da400bba8328dcd3b1af30416aa0d
--- /dev/null
+++ b/privatemodules/nc4/lib/pkgconfig/netcdf.pc
@@ -0,0 +1,13 @@
+prefix=/home/erikvs/privatemodules/nc4
+exec_prefix=${prefix}
+libdir=${exec_prefix}/lib
+includedir=${prefix}/include
+ccompiler=gcc
+
+Name: netcdf
+Description: NetCDF Client Library for C
+URL: http://www.unidata.ucar.edu/netcdf
+Version: 4.4.1.1
+Libs: -L${libdir} -lnetcdf
+Cflags: -I${includedir}
+
diff --git a/privatemodules/nc4/lib/pkgconfig/zlib.pc b/privatemodules/nc4/lib/pkgconfig/zlib.pc
new file mode 100644
index 0000000000000000000000000000000000000000..a039af2f6bff0a13117510ed6b712ef79ba9910e
--- /dev/null
+++ b/privatemodules/nc4/lib/pkgconfig/zlib.pc
@@ -0,0 +1,13 @@
+prefix=/home/erikvs/privatemodules/nc4
+exec_prefix=${prefix}
+libdir=${exec_prefix}/lib
+sharedlibdir=${libdir}
+includedir=${prefix}/include
+
+Name: zlib
+Description: zlib compression library
+Version: 1.2.8
+
+Requires:
+Libs: -L${libdir} -L${sharedlibdir} -lz
+Cflags: -I${includedir}
diff --git a/privatemodules/nc4/share/hdf5_examples/README b/privatemodules/nc4/share/hdf5_examples/README
new file mode 100644
index 0000000000000000000000000000000000000000..0550b15619829df628a3410449cf51f12d85af05
--- /dev/null
+++ b/privatemodules/nc4/share/hdf5_examples/README
@@ -0,0 +1,17 @@
+                               HDF5 Examples
+
+This directory contains example programs for the installed APIs and scripts to 
+compile and run them.  Examples in the c and hl/c subdirectories are always 
+installed, and those in fortan, hl/fortran, c++ and hl/c++ will be installed 
+when fortran or c++ are enabled.
+
+Running the run-all-ex.sh script in this directory will run the scripts and in 
+turn the examples in all the subdirectories where examples are installed.  The 
+scripts can also be run individually.  The appropriate compile scripts in the 
+bin directory for this install will be used by default to compile and link the 
+example programs.  Note that h5redeploy must be run if these binaries are 
+copied or extracted in a directory other than the one where they were initially 
+installed.  Compile scripts from other locations can be used by setting an 
+environment variable prefix to the path of the directory containing the bin 
+directory with the compile scripts h5cc, h5fc, etc.  For example, export 
+prefix=/usr/local/hdf5 to use h5cc, h5fc, etc. in /usr/local/hdf5/bin.  
diff --git a/privatemodules/nc4/share/hdf5_examples/c/h5_attribute.c b/privatemodules/nc4/share/hdf5_examples/c/h5_attribute.c
new file mode 100644
index 0000000000000000000000000000000000000000..0ea015322d762ca47d3eb5d4e2cb9179b8890d4e
--- /dev/null
+++ b/privatemodules/nc4/share/hdf5_examples/c/h5_attribute.c
@@ -0,0 +1,295 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ *  This program illustrates the usage of the H5A Interface functions.
+ *  It creates and writes a dataset, and then creates and writes array,
+ *  scalar, and string attributes of the dataset.
+ *  Program reopens the file, attaches to the scalar attribute using
+ *  attribute name and reads and displays its value. Then index of the
+ *  third attribute is used to read and display attribute values.
+ *  The H5Aiterate function is used to iterate through the dataset attributes,
+ *  and display their names. The function is also reads and displays the values
+ *  of the array attribute.
+ */
+
+#include <stdlib.h>
+
+#include "hdf5.h"
+
+#define H5FILE_NAME "Attributes.h5"
+
+#define RANK  1   /* Rank and size of the dataset  */
+#define SIZE  7
+
+#define ARANK  2   /* Rank and dimension sizes of the first dataset attribute */
+#define ADIM1  2
+#define ADIM2  3
+#define ANAME  "Float attribute"      /* Name of the array attribute */
+#define ANAMES "Character attribute" /* Name of the string attribute */
+
+static herr_t attr_info(hid_t loc_id, const char *name, const H5A_info_t *ainfo, void *opdata);
+                                     /* Operator function */
+
+int
+main (void)
+{
+
+   hid_t   file, dataset;       /* File and dataset identifiers */
+
+   hid_t   fid;                 /* Dataspace identifier */
+   hid_t   attr1, attr2, attr3; /* Attribute identifiers */
+   hid_t   attr;
+   hid_t   aid1, aid2, aid3;    /* Attribute dataspace identifiers */
+   hid_t   atype, atype_mem;    /* Attribute type */
+   H5T_class_t  type_class;
+
+   hsize_t fdim[] = {SIZE};
+   hsize_t adim[] = {ADIM1, ADIM2};  /* Dimensions of the first attribute  */
+
+   float matrix[ADIM1][ADIM2]; /* Attribute data */
+
+   herr_t  ret;                /* Return value */
+   H5O_info_t oinfo;           /* Object info */
+   unsigned i, j;              /* Counters */
+   char    string_out[80];     /* Buffer to read string attribute back */
+   int     point_out;          /* Buffer to read scalar attribute back */
+
+   /*
+    * Data initialization.
+    */
+   int vector[] = {1, 2, 3, 4, 5, 6, 7};  /* Dataset data */
+   int point = 1;                         /* Value of the scalar attribute */
+   char string[] = "ABCD";                /* Value of the string attribute */
+
+
+   for (i=0; i < ADIM1; i++) {            /* Values of the array attribute */
+       for (j=0; j < ADIM2; j++)
+       matrix[i][j] = -1.;
+   }
+
+   /*
+    * Create a file.
+    */
+   file = H5Fcreate(H5FILE_NAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+   /*
+    * Create the dataspace for the dataset in the file.
+    */
+   fid = H5Screate(H5S_SIMPLE);
+   ret = H5Sset_extent_simple(fid, RANK, fdim, NULL);
+
+   /*
+    * Create the dataset in the file.
+    */
+   dataset = H5Dcreate2(file, "Dataset", H5T_NATIVE_INT, fid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+
+   /*
+    * Write data to the dataset.
+    */
+   ret = H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL , H5S_ALL, H5P_DEFAULT, vector);
+
+   /*
+    * Create dataspace for the first attribute.
+    */
+   aid1 = H5Screate(H5S_SIMPLE);
+   ret  = H5Sset_extent_simple(aid1, ARANK, adim, NULL);
+
+   /*
+    * Create array attribute.
+    */
+   attr1 = H5Acreate2(dataset, ANAME, H5T_NATIVE_FLOAT, aid1, H5P_DEFAULT, H5P_DEFAULT);
+
+   /*
+    * Write array attribute.
+    */
+   ret = H5Awrite(attr1, H5T_NATIVE_FLOAT, matrix);
+
+   /*
+    * Create scalar attribute.
+    */
+   aid2  = H5Screate(H5S_SCALAR);
+   attr2 = H5Acreate2(dataset, "Integer attribute", H5T_NATIVE_INT, aid2,
+                     H5P_DEFAULT, H5P_DEFAULT);
+
+   /*
+    * Write scalar attribute.
+    */
+   ret = H5Awrite(attr2, H5T_NATIVE_INT, &point);
+
+   /*
+    * Create string attribute.
+    */
+   aid3  = H5Screate(H5S_SCALAR);
+   atype = H5Tcopy(H5T_C_S1);
+           H5Tset_size(atype, 5);
+           H5Tset_strpad(atype,H5T_STR_NULLTERM);
+   attr3 = H5Acreate2(dataset, ANAMES, atype, aid3, H5P_DEFAULT, H5P_DEFAULT);
+
+   /*
+    * Write string attribute.
+    */
+   ret = H5Awrite(attr3, atype, string);
+
+   /*
+    * Close attribute and file dataspaces, and datatype.
+    */
+   ret = H5Sclose(aid1);
+   ret = H5Sclose(aid2);
+   ret = H5Sclose(aid3);
+   ret = H5Sclose(fid);
+   ret = H5Tclose(atype);
+
+   /*
+    * Close the attributes.
+    */
+   ret = H5Aclose(attr1);
+   ret = H5Aclose(attr2);
+   ret = H5Aclose(attr3);
+
+   /*
+    * Close the dataset.
+    */
+   ret = H5Dclose(dataset);
+
+   /*
+    * Close the file.
+    */
+   ret = H5Fclose(file);
+
+   /*
+    * Reopen the file.
+    */
+   file = H5Fopen(H5FILE_NAME, H5F_ACC_RDONLY, H5P_DEFAULT);
+
+   /*
+    * Open the dataset.
+    */
+   dataset = H5Dopen2(file, "Dataset", H5P_DEFAULT);
+
+   /*
+    * Attach to the scalar attribute using attribute name, then read and
+    * display its value.
+    */
+   attr = H5Aopen(dataset, "Integer attribute", H5P_DEFAULT);
+   ret  = H5Aread(attr, H5T_NATIVE_INT, &point_out);
+   printf("The value of the attribute \"Integer attribute\" is %d \n", point_out);
+   ret =  H5Aclose(attr);
+
+   /*
+    * Find string attribute by iterating through all attributes
+    */
+   ret = H5Oget_info(dataset, &oinfo);
+   for(i = 0; i < (unsigned)oinfo.num_attrs; i++) {
+      attr = H5Aopen_by_idx(dataset, ".", H5_INDEX_CRT_ORDER, H5_ITER_INC, (hsize_t)i, H5P_DEFAULT, H5P_DEFAULT);
+      atype = H5Aget_type(attr);
+      type_class = H5Tget_class(atype);
+      if (type_class == H5T_STRING) {
+           atype_mem = H5Tget_native_type(atype, H5T_DIR_ASCEND);
+           ret   = H5Aread(attr, atype_mem, string_out);
+           printf("Found string attribute; its index is %d , value =   %s \n", i, string_out);
+           ret   = H5Tclose(atype_mem);
+      }
+       ret   = H5Aclose(attr);
+       ret   = H5Tclose(atype);
+    }
+
+   /*
+    * Get attribute info using iteration function.
+    */
+    ret = H5Aiterate2(dataset, H5_INDEX_NAME, H5_ITER_INC, NULL, attr_info, NULL);
+
+   /*
+    * Close the dataset and the file.
+    */
+   H5Dclose(dataset);
+   H5Fclose(file);
+
+   return 0;
+}
+
+/*
+ * Operator function.
+ */
+static herr_t
+attr_info(hid_t loc_id, const char *name, const H5A_info_t *ainfo, void *opdata)
+{
+    hid_t attr, atype, aspace;  /* Attribute, datatype and dataspace identifiers */
+    int   rank;
+    hsize_t sdim[64];
+    herr_t ret;
+    int i;
+    size_t npoints;             /* Number of elements in the array attribute. */
+    float *float_array;         /* Pointer to the array attribute. */
+
+    /* avoid warnings */
+    opdata = opdata;
+
+    /*
+     * Open the attribute using its name.
+     */
+    attr = H5Aopen(loc_id, name, H5P_DEFAULT);
+
+    /*
+     * Display attribute name.
+     */
+    printf("\nName : %s\n", name);
+
+    /*
+     * Get attribute datatype, dataspace, rank, and dimensions.
+     */
+    atype  = H5Aget_type(attr);
+    aspace = H5Aget_space(attr);
+    rank = H5Sget_simple_extent_ndims(aspace);
+    ret = H5Sget_simple_extent_dims(aspace, sdim, NULL);
+
+    /*
+     *  Display rank and dimension sizes for the array attribute.
+     */
+
+    if(rank > 0) {
+        printf("Rank : %d \n", rank);
+        printf("Dimension sizes : ");
+        for (i=0; i< rank; i++)
+            printf("%d ", (int)sdim[i]);
+        printf("\n");
+    }
+
+    /*
+     * Read array attribute and display its type and values.
+     */
+
+    if (H5T_FLOAT == H5Tget_class(atype)) {
+        printf("Type : FLOAT \n");
+        npoints = H5Sget_simple_extent_npoints(aspace);
+        float_array = (float *)malloc(sizeof(float)*(int)npoints);
+        ret = H5Aread(attr, atype, float_array);
+        printf("Values : ");
+        for( i = 0; i < (int)npoints; i++)
+            printf("%f ", float_array[i]);
+        printf("\n");
+        free(float_array);
+    }
+
+    /*
+     * Release all identifiers.
+     */
+    H5Tclose(atype);
+    H5Sclose(aspace);
+    H5Aclose(attr);
+
+    return 0;
+}
+
diff --git a/privatemodules/nc4/share/hdf5_examples/c/h5_chunk_read.c b/privatemodules/nc4/share/hdf5_examples/c/h5_chunk_read.c
new file mode 100644
index 0000000000000000000000000000000000000000..98b0bb495d21473a4e0a7c1f2f09eeee92032aea
--- /dev/null
+++ b/privatemodules/nc4/share/hdf5_examples/c/h5_chunk_read.c
@@ -0,0 +1,214 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ *   This example shows how to read data from a chunked dataset.
+ *   We will read from the file created by h5_extend_write.c
+ */
+
+#include "hdf5.h"
+
+#define H5FILE_NAME        "SDSextendible.h5"
+#define DATASETNAME "ExtendibleArray"
+#define RANK         2
+#define RANKC        1
+#define NX           10
+#define NY           5
+
+int
+main (void)
+{
+    hid_t       file;                        /* handles */
+    hid_t       dataset;
+    hid_t       filespace;
+    hid_t       memspace;
+    hid_t       cparms;
+    hsize_t     dims[2];                     /* dataset and chunk dimensions*/
+    hsize_t     chunk_dims[2];
+    hsize_t     col_dims[1];
+    hsize_t     count[2];
+    hsize_t     offset[2];
+
+    herr_t      status, status_n;
+
+    int         data_out[NX][NY];  /* buffer for dataset to be read */
+    int         chunk_out[2][5];   /* buffer for chunk to be read */
+    int         column[10];        /* buffer for column to be read */
+    int         rank, rank_chunk;
+    int		i, j;
+
+
+
+    /*
+     * Open the file and the dataset.
+     */
+    file = H5Fopen(H5FILE_NAME, H5F_ACC_RDONLY, H5P_DEFAULT);
+    dataset = H5Dopen2(file, DATASETNAME, H5P_DEFAULT);
+
+    /*
+     * Get dataset rank and dimension.
+     */
+
+    filespace = H5Dget_space(dataset);    /* Get filespace handle first. */
+    rank      = H5Sget_simple_extent_ndims(filespace);
+    status_n  = H5Sget_simple_extent_dims(filespace, dims, NULL);
+    printf("dataset rank %d, dimensions %lu x %lu\n",
+	   rank, (unsigned long)(dims[0]), (unsigned long)(dims[1]));
+
+    /*
+     * Define the memory space to read dataset.
+     */
+    memspace = H5Screate_simple(RANK,dims,NULL);
+
+    /*
+     * Read dataset back and display.
+     */
+    status = H5Dread(dataset, H5T_NATIVE_INT, memspace, filespace,
+		     H5P_DEFAULT, data_out);
+    printf("\n");
+    printf("Dataset: \n");
+    for (j = 0; j < dims[0]; j++) {
+	for (i = 0; i < dims[1]; i++) printf("%d ", data_out[j][i]);
+	printf("\n");
+    }
+
+    /*
+     * Close/release resources.
+     */
+    H5Sclose(memspace);
+
+    /*
+     *	    dataset rank 2, dimensions 10 x 5
+     *	    chunk rank 2, dimensions 2 x 5
+
+     *	    Dataset:
+     *	    1 1 1 3 3
+     *	    1 1 1 3 3
+     *	    1 1 1 0 0
+     *	    2 0 0 0 0
+     *	    2 0 0 0 0
+     *	    2 0 0 0 0
+     *	    2 0 0 0 0
+     *	    2 0 0 0 0
+     *	    2 0 0 0 0
+     *	    2 0 0 0 0
+     */
+
+    /*
+     * Read the third column from the dataset.
+     * First define memory dataspace, then define hyperslab
+     * and read it into column array.
+     */
+    col_dims[0] = 10;
+    memspace =  H5Screate_simple(RANKC, col_dims, NULL);
+
+    /*
+     * Define the column (hyperslab) to read.
+     */
+    offset[0] = 0;
+    offset[1] = 2;
+    count[0]  = 10;
+    count[1]  = 1;
+    status = H5Sselect_hyperslab(filespace, H5S_SELECT_SET, offset, NULL,
+				 count, NULL);
+    status = H5Dread(dataset, H5T_NATIVE_INT, memspace, filespace,
+		     H5P_DEFAULT, column);
+    printf("\n");
+    printf("Third column: \n");
+    for (i = 0; i < 10; i++) {
+	printf("%d \n", column[i]);
+    }
+
+    /*
+     * Close/release resources.
+     */
+    H5Sclose(memspace);
+
+    /*
+     *	    Third column:
+     *	    1
+     *	    1
+     *	    1
+     *	    0
+     *	    0
+     *	    0
+     *	    0
+     *	    0
+     *	    0
+     *	    0
+     */
+
+    /*
+     * Get creation properties list.
+     */
+    cparms = H5Dget_create_plist(dataset); /* Get properties handle first. */
+
+    if (H5D_CHUNKED == H5Pget_layout(cparms))  {
+
+	/*
+	 * Get chunking information: rank and dimensions
+	 */
+	rank_chunk = H5Pget_chunk(cparms, 2, chunk_dims);
+	printf("chunk rank %d, dimensions %lu x %lu\n", rank_chunk,
+	       (unsigned long)(chunk_dims[0]), (unsigned long)(chunk_dims[1]));
+
+        /*
+         * Define the memory space to read a chunk.
+         */
+        memspace = H5Screate_simple(rank_chunk,chunk_dims,NULL);
+
+        /*
+         * Define chunk in the file (hyperslab) to read.
+         */
+        offset[0] = 2;
+        offset[1] = 0;
+        count[0]  = chunk_dims[0];
+        count[1]  = chunk_dims[1];
+        status = H5Sselect_hyperslab(filespace, H5S_SELECT_SET, offset, NULL,
+                                     count, NULL);
+
+        /*
+         * Read chunk back and display.
+         */
+        status = H5Dread(dataset, H5T_NATIVE_INT, memspace, filespace,
+                         H5P_DEFAULT, chunk_out);
+        printf("\n");
+        printf("Chunk: \n");
+        for (j = 0; j < chunk_dims[0]; j++) {
+            for (i = 0; i < chunk_dims[1]; i++) printf("%d ", chunk_out[j][i]);
+            printf("\n");
+        }
+        /*
+         *	 Chunk:
+         *	 1 1 1 0 0
+         *	 2 0 0 0 0
+         */
+
+        /*
+         * Close/release resources.
+         */
+        H5Sclose(memspace);
+    }
+
+    /*
+     * Close/release resources.
+     */
+    H5Pclose(cparms);
+    H5Dclose(dataset);
+    H5Sclose(filespace);
+    H5Fclose(file);
+
+    return 0;
+}
diff --git a/privatemodules/nc4/share/hdf5_examples/c/h5_cmprss.c b/privatemodules/nc4/share/hdf5_examples/c/h5_cmprss.c
new file mode 100644
index 0000000000000000000000000000000000000000..4a2f9828081a66fb7405cc8fd4f953f31c7009e3
--- /dev/null
+++ b/privatemodules/nc4/share/hdf5_examples/c/h5_cmprss.c
@@ -0,0 +1,125 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/* 
+ *  This example illustrates how to create a compressed dataset.
+ *  It is used in the HDF5 Tutorial.
+ */ 
+
+#include "hdf5.h"
+
+#define FILE    "cmprss.h5"
+#define RANK    2
+#define DIM0    100
+#define DIM1    20
+ 
+int main () {
+
+    hid_t    file_id, dataset_id, dataspace_id; /* identifiers */
+    hid_t    plist_id; 
+
+    size_t   nelmts;
+    unsigned flags, filter_info;
+    H5Z_filter_t filter_type;
+
+    herr_t   status;
+    hsize_t  dims[2];
+    hsize_t  cdims[2];
+ 
+    int      idx;
+    int      i,j, numfilt;
+    int      buf[DIM0][DIM1];
+    int      rbuf [DIM0][DIM1];
+
+    /* Uncomment these variables to use SZIP compression 
+    unsigned szip_options_mask;
+    unsigned szip_pixels_per_block;
+    */
+
+    /* Create a file.  */
+    file_id = H5Fcreate (FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+
+    /* Create dataset "Compressed Data" in the group using absolute name.  */
+    dims[0] = DIM0;
+    dims[1] = DIM1;
+    dataspace_id = H5Screate_simple (RANK, dims, NULL);
+
+    plist_id  = H5Pcreate (H5P_DATASET_CREATE);
+
+    /* Dataset must be chunked for compression */
+    cdims[0] = 20;
+    cdims[1] = 20;
+    status = H5Pset_chunk (plist_id, 2, cdims);
+
+    /* Set ZLIB / DEFLATE Compression using compression level 6.
+     * To use SZIP Compression comment out these lines. 
+    */ 
+    status = H5Pset_deflate (plist_id, 6); 
+
+    /* Uncomment these lines to set SZIP Compression 
+    szip_options_mask = H5_SZIP_NN_OPTION_MASK;
+    szip_pixels_per_block = 16;
+    status = H5Pset_szip (plist_id, szip_options_mask, szip_pixels_per_block);
+    */
+    
+    dataset_id = H5Dcreate2 (file_id, "Compressed_Data", H5T_STD_I32BE, 
+                            dataspace_id, H5P_DEFAULT, plist_id, H5P_DEFAULT); 
+
+    for (i = 0; i< DIM0; i++) 
+        for (j=0; j<DIM1; j++) 
+           buf[i][j] = i+j;
+
+    status = H5Dwrite (dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf);
+
+    status = H5Sclose (dataspace_id);
+    status = H5Dclose (dataset_id);
+    status = H5Pclose (plist_id);
+    status = H5Fclose (file_id);
+
+    /* Now reopen the file and dataset in the file. */
+    file_id = H5Fopen (FILE, H5F_ACC_RDWR, H5P_DEFAULT);
+    dataset_id = H5Dopen2 (file_id, "Compressed_Data", H5P_DEFAULT);
+
+    /* Retrieve filter information. */
+    plist_id = H5Dget_create_plist (dataset_id);
+    
+    numfilt = H5Pget_nfilters (plist_id);
+    printf ("Number of filters associated with dataset: %i\n", numfilt);
+     
+    for (i=0; i<numfilt; i++) {
+       nelmts = 0;
+       filter_type = H5Pget_filter2 (plist_id, 0, &flags, &nelmts, NULL, 0, NULL,
+                     &filter_info);
+       printf ("Filter Type: ");
+       switch (filter_type) {
+         case H5Z_FILTER_DEFLATE:
+              printf ("H5Z_FILTER_DEFLATE\n");
+              break;
+         case H5Z_FILTER_SZIP:
+              printf ("H5Z_FILTER_SZIP\n");
+              break;
+         default:
+              printf ("Other filter type included.\n");
+         }
+    }
+
+    status = H5Dread (dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, 
+                      H5P_DEFAULT, rbuf); 
+    
+    status = H5Dclose (dataset_id);
+    status = H5Pclose (plist_id);
+    status = H5Fclose (file_id);
+}
diff --git a/privatemodules/nc4/share/hdf5_examples/c/h5_compound.c b/privatemodules/nc4/share/hdf5_examples/c/h5_compound.c
new file mode 100644
index 0000000000000000000000000000000000000000..3fca2a5acdf92553beaaad6b5224961fcc346498
--- /dev/null
+++ b/privatemodules/nc4/share/hdf5_examples/c/h5_compound.c
@@ -0,0 +1,168 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * This example shows how to create a compound data type,
+ * write an array which has the compound data type to the file,
+ * and read back fields' subsets.
+ */
+
+#include "hdf5.h"
+
+#define H5FILE_NAME          "SDScompound.h5"
+#define DATASETNAME   "ArrayOfStructures"
+#define LENGTH        10
+#define RANK          1
+
+int
+main(void)
+{
+
+    /* First structure  and dataset*/
+    typedef struct s1_t {
+	int    a;
+	float  b;
+	double c;
+    } s1_t;
+    s1_t       s1[LENGTH];
+    hid_t      s1_tid;     /* File datatype identifier */
+
+    /* Second structure (subset of s1_t)  and dataset*/
+    typedef struct s2_t {
+	double c;
+	int    a;
+    } s2_t;
+    s2_t       s2[LENGTH];
+    hid_t      s2_tid;    /* Memory datatype handle */
+
+    /* Third "structure" ( will be used to read float field of s1) */
+    hid_t      s3_tid;   /* Memory datatype handle */
+    float      s3[LENGTH];
+
+    int        i;
+    hid_t      file, dataset, space; /* Handles */
+    herr_t     status;
+    hsize_t    dim[] = {LENGTH};   /* Dataspace dimensions */
+
+
+    /*
+     * Initialize the data
+     */
+    for (i = 0; i< LENGTH; i++) {
+        s1[i].a = i;
+        s1[i].b = i*i;
+        s1[i].c = 1./(i+1);
+    }
+
+    /*
+     * Create the data space.
+     */
+    space = H5Screate_simple(RANK, dim, NULL);
+
+    /*
+     * Create the file.
+     */
+    file = H5Fcreate(H5FILE_NAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /*
+     * Create the memory data type.
+     */
+    s1_tid = H5Tcreate (H5T_COMPOUND, sizeof(s1_t));
+    H5Tinsert(s1_tid, "a_name", HOFFSET(s1_t, a), H5T_NATIVE_INT);
+    H5Tinsert(s1_tid, "c_name", HOFFSET(s1_t, c), H5T_NATIVE_DOUBLE);
+    H5Tinsert(s1_tid, "b_name", HOFFSET(s1_t, b), H5T_NATIVE_FLOAT);
+
+    /*
+     * Create the dataset.
+     */
+    dataset = H5Dcreate2(file, DATASETNAME, s1_tid, space, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+
+    /*
+     * Wtite data to the dataset;
+     */
+    status = H5Dwrite(dataset, s1_tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, s1);
+
+    /*
+     * Release resources
+     */
+    H5Tclose(s1_tid);
+    H5Sclose(space);
+    H5Dclose(dataset);
+    H5Fclose(file);
+
+    /*
+     * Open the file and the dataset.
+     */
+    file = H5Fopen(H5FILE_NAME, H5F_ACC_RDONLY, H5P_DEFAULT);
+
+    dataset = H5Dopen2(file, DATASETNAME, H5P_DEFAULT);
+
+    /*
+     * Create a data type for s2
+     */
+    s2_tid = H5Tcreate(H5T_COMPOUND, sizeof(s2_t));
+
+    H5Tinsert(s2_tid, "c_name", HOFFSET(s2_t, c), H5T_NATIVE_DOUBLE);
+    H5Tinsert(s2_tid, "a_name", HOFFSET(s2_t, a), H5T_NATIVE_INT);
+
+    /*
+     * Read two fields c and a from s1 dataset. Fields in the file
+     * are found by their names "c_name" and "a_name".
+     */
+    status = H5Dread(dataset, s2_tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, s2);
+
+    /*
+     * Display the fields
+     */
+    printf("\n");
+    printf("Field c : \n");
+    for( i = 0; i < LENGTH; i++) printf("%.4f ", s2[i].c);
+    printf("\n");
+
+    printf("\n");
+    printf("Field a : \n");
+    for( i = 0; i < LENGTH; i++) printf("%d ", s2[i].a);
+    printf("\n");
+
+    /*
+     * Create a data type for s3.
+     */
+    s3_tid = H5Tcreate(H5T_COMPOUND, sizeof(float));
+
+    status = H5Tinsert(s3_tid, "b_name", 0, H5T_NATIVE_FLOAT);
+
+    /*
+     * Read field b from s1 dataset. Field in the file is found by its name.
+     */
+    status = H5Dread(dataset, s3_tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, s3);
+
+    /*
+     * Display the field
+     */
+    printf("\n");
+    printf("Field b : \n");
+    for( i = 0; i < LENGTH; i++) printf("%.4f ", s3[i]);
+    printf("\n");
+
+    /*
+     * Release resources
+     */
+    H5Tclose(s2_tid);
+    H5Tclose(s3_tid);
+    H5Dclose(dataset);
+    H5Fclose(file);
+
+    return 0;
+}
diff --git a/privatemodules/nc4/share/hdf5_examples/c/h5_crtatt.c b/privatemodules/nc4/share/hdf5_examples/c/h5_crtatt.c
new file mode 100644
index 0000000000000000000000000000000000000000..416839fc47b548af6ebfd38c26e1b5d42c8f3f0e
--- /dev/null
+++ b/privatemodules/nc4/share/hdf5_examples/c/h5_crtatt.c
@@ -0,0 +1,63 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ *  This example illustrates how to create an attribute attached to a
+ *  dataset.  It is used in the HDF5 Tutorial.
+ */
+
+#include "hdf5.h"
+#define FILE "dset.h5"
+
+int main() {
+
+   hid_t       file_id, dataset_id, attribute_id, dataspace_id;  /* identifiers */
+   hsize_t     dims;
+   int         attr_data[2];
+   herr_t      status;
+
+   /* Initialize the attribute data. */
+   attr_data[0] = 100;
+   attr_data[1] = 200;
+
+   /* Open an existing file. */
+   file_id = H5Fopen(FILE, H5F_ACC_RDWR, H5P_DEFAULT);
+
+   /* Open an existing dataset. */
+   dataset_id = H5Dopen2(file_id, "/dset", H5P_DEFAULT);
+
+   /* Create the data space for the attribute. */
+   dims = 2;
+   dataspace_id = H5Screate_simple(1, &dims, NULL);
+
+   /* Create a dataset attribute. */
+   attribute_id = H5Acreate2 (dataset_id, "Units", H5T_STD_I32BE, dataspace_id, 
+                             H5P_DEFAULT, H5P_DEFAULT);
+
+   /* Write the attribute data. */
+   status = H5Awrite(attribute_id, H5T_NATIVE_INT, attr_data);
+
+   /* Close the attribute. */
+   status = H5Aclose(attribute_id);
+
+   /* Close the dataspace. */
+   status = H5Sclose(dataspace_id);
+
+   /* Close to the dataset. */
+   status = H5Dclose(dataset_id);
+
+   /* Close the file. */
+   status = H5Fclose(file_id);
+}
diff --git a/privatemodules/nc4/share/hdf5_examples/c/h5_crtdat.c b/privatemodules/nc4/share/hdf5_examples/c/h5_crtdat.c
new file mode 100644
index 0000000000000000000000000000000000000000..bbb29b2558f15aa6b45011cc7967f2122fd4b6c2
--- /dev/null
+++ b/privatemodules/nc4/share/hdf5_examples/c/h5_crtdat.c
@@ -0,0 +1,51 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ *  This example illustrates how to create a dataset that is a 4 x 6 
+ *  array.  It is used in the HDF5 Tutorial.
+ */
+
+#include "hdf5.h"
+#define FILE "dset.h5"
+
+int main() {
+
+   hid_t       file_id, dataset_id, dataspace_id;  /* identifiers */
+   hsize_t     dims[2];
+   herr_t      status;
+
+   /* Create a new file using default properties. */
+   file_id = H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+   /* Create the data space for the dataset. */
+   dims[0] = 4; 
+   dims[1] = 6; 
+   dataspace_id = H5Screate_simple(2, dims, NULL);
+
+   /* Create the dataset. */
+   dataset_id = H5Dcreate2(file_id, "/dset", H5T_STD_I32BE, dataspace_id, 
+                          H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+
+   /* End access to the dataset and release resources used by it. */
+   status = H5Dclose(dataset_id);
+
+   /* Terminate access to the data space. */ 
+   status = H5Sclose(dataspace_id);
+
+   /* Close the file. */
+   status = H5Fclose(file_id);
+}
+
diff --git a/privatemodules/nc4/share/hdf5_examples/c/h5_crtgrp.c b/privatemodules/nc4/share/hdf5_examples/c/h5_crtgrp.c
new file mode 100644
index 0000000000000000000000000000000000000000..3a94a8f3395dbf9d3ca1f66adc25c138cc408278
--- /dev/null
+++ b/privatemodules/nc4/share/hdf5_examples/c/h5_crtgrp.c
@@ -0,0 +1,40 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ *  This example illustrates how to create and close a group. 
+ *  It is used in the HDF5 Tutorial.
+ */
+
+#include "hdf5.h"
+#define FILE "group.h5"
+
+int main() {
+
+   hid_t       file_id, group_id;  /* identifiers */
+   herr_t      status;
+
+   /* Create a new file using default properties. */
+   file_id = H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+   /* Create a group named "/MyGroup" in the file. */
+   group_id = H5Gcreate2(file_id, "/MyGroup", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+
+   /* Close the group. */
+   status = H5Gclose(group_id);
+
+   /* Terminate access to the file. */
+   status = H5Fclose(file_id);
+}
diff --git a/privatemodules/nc4/share/hdf5_examples/c/h5_crtgrpar.c b/privatemodules/nc4/share/hdf5_examples/c/h5_crtgrpar.c
new file mode 100644
index 0000000000000000000000000000000000000000..9e6fc4091310d108adb888d5daede2a45af74cea
--- /dev/null
+++ b/privatemodules/nc4/share/hdf5_examples/c/h5_crtgrpar.c
@@ -0,0 +1,48 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ *  This example illustrates the creation of groups using absolute and 
+ *  relative names.  It is used in the HDF5 Tutorial.
+ */
+
+#include "hdf5.h"
+#define FILE "groups.h5"
+
+int main() {
+
+   hid_t       file_id, group1_id, group2_id, group3_id;  /* identifiers */
+   herr_t      status;
+
+   /* Create a new file using default properties. */
+   file_id = H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+   /* Create group "MyGroup" in the root group using absolute name. */
+   group1_id = H5Gcreate2(file_id, "/MyGroup", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+
+   /* Create group "Group_A" in group "MyGroup" using absolute name. */
+   group2_id = H5Gcreate2(file_id, "/MyGroup/Group_A", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+
+   /* Create group "Group_B" in group "MyGroup" using relative name. */
+   group3_id = H5Gcreate2(group1_id, "Group_B", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+
+   /* Close groups. */
+   status = H5Gclose(group1_id);
+   status = H5Gclose(group2_id);
+   status = H5Gclose(group3_id);
+
+   /* Close the file. */
+   status = H5Fclose(file_id);
+}
diff --git a/privatemodules/nc4/share/hdf5_examples/c/h5_crtgrpd.c b/privatemodules/nc4/share/hdf5_examples/c/h5_crtgrpd.c
new file mode 100644
index 0000000000000000000000000000000000000000..9c45928fd85e6065b3c68cc3492f776f7315728d
--- /dev/null
+++ b/privatemodules/nc4/share/hdf5_examples/c/h5_crtgrpd.c
@@ -0,0 +1,91 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ *  This example illustrates how to create a dataset in a group.
+ *  It is used in the HDF5 Tutorial.
+ */
+
+#include "hdf5.h"
+#define FILE "groups.h5"
+
+int main() {
+
+   hid_t       file_id, group_id, dataset_id, dataspace_id;  /* identifiers */
+   hsize_t     dims[2];
+   herr_t      status;
+   int         i, j, dset1_data[3][3], dset2_data[2][10];
+
+   /* Initialize the first dataset. */
+   for (i = 0; i < 3; i++)
+      for (j = 0; j < 3; j++)
+         dset1_data[i][j] = j + 1;
+
+   /* Initialize the second dataset. */
+   for (i = 0; i < 2; i++)
+      for (j = 0; j < 10; j++)
+         dset2_data[i][j] = j + 1;
+
+   /* Open an existing file. */
+   file_id = H5Fopen(FILE, H5F_ACC_RDWR, H5P_DEFAULT);
+
+   /* Create the data space for the first dataset. */
+   dims[0] = 3;
+   dims[1] = 3;
+   dataspace_id = H5Screate_simple(2, dims, NULL);
+
+   /* Create a dataset in group "MyGroup". */
+   dataset_id = H5Dcreate2(file_id, "/MyGroup/dset1", H5T_STD_I32BE, dataspace_id,
+                          H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+
+   /* Write the first dataset. */
+   status = H5Dwrite(dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT,
+                     dset1_data);
+
+   /* Close the data space for the first dataset. */
+   status = H5Sclose(dataspace_id);
+
+   /* Close the first dataset. */
+   status = H5Dclose(dataset_id);
+
+   /* Open an existing group of the specified file. */
+   group_id = H5Gopen2(file_id, "/MyGroup/Group_A", H5P_DEFAULT);
+
+   /* Create the data space for the second dataset. */
+   dims[0] = 2;
+   dims[1] = 10;
+   dataspace_id = H5Screate_simple(2, dims, NULL);
+
+   /* Create the second dataset in group "Group_A". */
+   dataset_id = H5Dcreate2(group_id, "dset2", H5T_STD_I32BE, dataspace_id, 
+                          H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+
+   /* Write the second dataset. */
+   status = H5Dwrite(dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT,
+                     dset2_data);
+
+   /* Close the data space for the second dataset. */
+   status = H5Sclose(dataspace_id);
+
+   /* Close the second dataset */
+   status = H5Dclose(dataset_id);
+
+   /* Close the group. */
+   status = H5Gclose(group_id);
+
+   /* Close the file. */
+   status = H5Fclose(file_id);
+}
+
diff --git a/privatemodules/nc4/share/hdf5_examples/c/h5_drivers.c b/privatemodules/nc4/share/hdf5_examples/c/h5_drivers.c
new file mode 100644
index 0000000000000000000000000000000000000000..7245794108c100be1588d04bff96efe75a7749ae
--- /dev/null
+++ b/privatemodules/nc4/share/hdf5_examples/c/h5_drivers.c
@@ -0,0 +1,104 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * This shows how to use the hdf5 virtual file drivers.
+ * The example codes here do not check return values for the
+ * sake of simplicity.  As in all proper programs, return codes
+ * should be checked.
+ */
+
+#include "hdf5.h"
+#include "stdlib.h"
+
+/* global variables */
+int cleanup_g	=	-1;	/* whether to clean.  Init to not set. */
+
+/* prototypes */
+void cleanup(const char *);
+void split_file(void);
+
+
+/*
+ * Cleanup a file unless $HDF5_NOCLEANUP is set.
+ */
+void
+cleanup(const char *filename)
+{
+    if (cleanup_g == -1)
+	cleanup_g = getenv("HDF5_NOCLEANUP") ? 0 : 1;
+    if (cleanup_g)
+	remove(filename);
+}
+
+
+/*
+ * This shows how to use the split file driver.
+ */
+void
+split_file(void)
+{
+    hid_t fapl, fid;
+
+    /* Example 1: Both metadata and rawdata files are in the same  */
+    /*    directory.   Use Station1-m.h5 and Station1-r.h5 as      */
+    /*    the metadata and rawdata files.                          */
+    fapl = H5Pcreate(H5P_FILE_ACCESS);
+    H5Pset_fapl_split(fapl, "-m.h5", H5P_DEFAULT, "-r.h5", H5P_DEFAULT);
+    fid=H5Fcreate("Station1",H5F_ACC_TRUNC,H5P_DEFAULT,fapl);
+    /* using the file ... */
+    H5Fclose(fid);
+    H5Pclose(fapl);
+    /* Remove files created */
+    cleanup("Station1-m.h5");
+    cleanup("Station1-r.h5");
+
+    /* Example 2: metadata and rawdata files are in different      */
+    /*    directories.  Use PointA-m.h5 and /tmp/PointA-r.h5 as    */
+    /*    the metadata and rawdata files.                          */
+    fapl = H5Pcreate(H5P_FILE_ACCESS);
+    H5Pset_fapl_split(fapl, "-m.h5", H5P_DEFAULT, "/tmp/%s-r.h5", H5P_DEFAULT);
+    fid=H5Fcreate("PointA",H5F_ACC_TRUNC,H5P_DEFAULT,fapl);
+    /* using the file ... */
+    H5Fclose(fid);
+    H5Pclose(fapl);
+    /* Remove files created */
+    cleanup("PointA-m.h5");
+    cleanup("/tmp/PointA-r.h5");
+
+    /* Example 3: Using default extension names for the metadata   */
+    /*    and rawdata files.  Use Measure.meta and Measure.raw as  */
+    /*    the metadata and rawdata files.                          */
+    fapl = H5Pcreate(H5P_FILE_ACCESS);
+    H5Pset_fapl_split(fapl, NULL, H5P_DEFAULT, NULL, H5P_DEFAULT);
+    fid=H5Fcreate("Measure",H5F_ACC_TRUNC,H5P_DEFAULT,fapl);
+    /* using the file ... */
+    H5Fclose(fid);
+    H5Pclose(fapl);
+    /* Remove files created */
+    cleanup("Measure.meta");
+    cleanup("Measure.raw");
+}
+
+
+/* Main Body */
+int
+main (void)
+{
+
+    split_file();
+
+    return(0);
+}
diff --git a/privatemodules/nc4/share/hdf5_examples/c/h5_elink_unix2win.c b/privatemodules/nc4/share/hdf5_examples/c/h5_elink_unix2win.c
new file mode 100644
index 0000000000000000000000000000000000000000..9c0918c6807ae2d9d9faffa42a3c5a8ae5a6fa9d
--- /dev/null
+++ b/privatemodules/nc4/share/hdf5_examples/c/h5_elink_unix2win.c
@@ -0,0 +1,206 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/* This program demonstrates how to translate an external link created on
+ * a Windows machine into a format that a *nix machine can read.
+ * This is done by registering a new traversal function for external links.
+ *
+ * This example is designed to be run on Unix and will create an external
+ * link with a Windows-style path.  Using the traversal function below,
+ * the example then successfully follows the external link.
+ *
+ * The external link will create a  file called "u2w/u2w_target.h5".
+ * The example will fail if the directory u2w does not exist.
+ */
+
+#include "hdf5.h"
+#include <stdlib.h>
+#include <string.h>
+
+
+/* "Windows to Unix" traversal function for external links
+ *
+ * Translates a filename stored in Unix format to Windows format by replacing
+ * forward slashes with backslashes.
+ * Makes no attempt to handle Windows drive names (e.g., "C:\"), spaces within
+ * file names, quotes, etc.  These are left as an exercise for the user. :)
+ * Note that this may not be necessary on your system; many Windows systems can
+ * understand Unix paths.
+ */
+static hid_t elink_unix2win_trav(const char *link_name, hid_t cur_group,
+    const void *udata, size_t udata_size, hid_t lapl_id)
+{
+    hid_t         fid;
+    const char   *file_name;
+    const char   *obj_name;
+    char         *new_fname = NULL;     /* Buffer allocated to hold Unix file path */
+    ssize_t       prefix_len;           /* External link prefix length */
+    size_t        fname_len;
+    size_t        start_pos;            /* Initial position in new_fname buffer */
+    size_t        x;                    /* Counter variable */
+    hid_t         ret_value = -1;
+
+    printf("Converting Unix path to Windows path.\n");
+
+    if(H5Lunpack_elink_val(udata, udata_size, NULL, &file_name, &obj_name) < 0)
+        goto error;
+    fname_len = strlen(file_name);
+
+    /* See if the external link prefix property is set */
+    if((prefix_len = H5Pget_elink_prefix(lapl_id, NULL, 0)) < 0)
+        goto error;
+
+    /* If so, prepend it to the filename.  We assume that the prefix
+     * is in the correct format for the current file system.
+     */
+    if(prefix_len > 0)
+    {
+        /* Allocate a buffer to hold the filename plus prefix */
+        new_fname = malloc(prefix_len + fname_len + 1);
+
+        /* Copy the prefix into the buffer */
+        if(H5Pget_elink_prefix(lapl_id, new_fname, (size_t)(prefix_len + 1)) < 0)
+            goto error;
+
+        start_pos = prefix_len;
+    }
+    else
+    {
+        /* Allocate a buffer to hold just the filename */
+        new_fname = malloc(fname_len + 1);
+        start_pos = 0;
+    }
+
+    /* We should now copy file_name into new_fname starting at position pos.
+     * We'll convert '/' characters into '\' characters as we go.
+     */
+    for(x=0; file_name[x] != '\0'; x++)
+    {
+        if(file_name[x] == '/')
+            new_fname[x + start_pos] = '\\';
+        else
+            new_fname[x + start_pos] = file_name[x];
+    }
+    new_fname[x + start_pos] = '\0';
+
+    /* Now open the file and object within it */
+    if((fid = H5Fopen(new_fname, H5F_ACC_RDWR, H5P_DEFAULT)) < 0)
+        goto error;
+    ret_value = H5Oopen(fid, obj_name, lapl_id); /* If this fails, our return value will be negative. */
+    if(H5Fclose(fid) < 0)
+        goto error;
+
+    /* Free file name if it's been allocated */
+    if(new_fname)
+        free(new_fname);
+
+    return ret_value;
+
+error:
+    /* Free file name if it's been allocated */
+    if(new_fname)
+        free(new_fname);
+    return -1;
+}
+
+const H5L_class_t elink_unix2win_class[1] = {{
+    H5L_LINK_CLASS_T_VERS,      /* H5L_class_t version       */
+    H5L_TYPE_EXTERNAL,          /* Link type id number            */
+    "unix2win external link",   /* Link class name for debugging  */
+    NULL,                       /* Creation callback              */
+    NULL,                       /* Move callback                  */
+    NULL,                       /* Copy callback                  */
+    elink_unix2win_trav,        /* The actual traversal function  */
+    NULL,                       /* Deletion callback              */
+    NULL                        /* Query callback                 */
+}};
+
+
+/* The example function.
+ * Creates a file named "unix2win.h5" with an external link pointing to
+ * the file "u2w/u2w_target.h5".
+ *
+ * Registers a new traversal function for external links and then
+ * follows the external link to open the target file.
+ */
+static int
+unix2win_example(void)
+{
+    hid_t  fid = (-1);         /* File ID */
+    hid_t  gid = (-1);         /* Group ID */
+
+    /* Create the target file. */
+#ifdef H5_HAVE_WIN32_API
+    if((fid=H5Fcreate("u2w\\u2w_target.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT))<0) goto error;
+#else
+    if((fid=H5Fcreate("u2w/u2w_target.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT))<0) goto error;
+#endif
+    if(H5Fclose(fid) < 0) goto error;
+
+    /* Create the source file with an external link in Windows format */
+    if((fid=H5Fcreate("unix2win.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT))<0) goto error;
+
+    /* Create the external link */
+    if(H5Lcreate_external("u2w/../u2w/u2w_target.h5", "/", fid, "ext_link", H5P_DEFAULT, H5P_DEFAULT) < 0) goto error;
+
+    /* If we are not on Windows, assume we are on a Unix-y filesystem and
+     * follow the external link normally.
+     * If we are on Windows, register the unix2win traversal function so
+     * that external links can be traversed.
+     */
+
+#ifdef H5_HAVE_WIN32_API
+    /* Register the elink_unix2win class defined above to replace default
+     * external links
+     */
+    if(H5Lregister(elink_unix2win_class) < 0) goto error;
+#endif
+
+    /* Now follow the link */
+    if((gid = H5Gopen2(fid, "ext_link", H5P_DEFAULT)) < 0) goto error;
+    printf("Successfully followed external link.\n");
+
+    /* Close the group and the file */
+    if(H5Gclose(gid) <0) goto error;
+    if(H5Fclose(fid) <0) goto error;
+
+    return 0;
+
+ error:
+    printf("Error!\n");
+    H5E_BEGIN_TRY {
+      H5Gclose (gid);
+      H5Fclose (fid);
+    } H5E_END_TRY;
+    return -1;
+}
+
+
+/* Main function
+ *
+ * Invokes the example function.
+ */
+int
+main(void)
+{
+    int    ret;
+
+    printf("Testing unix2win external links.\n");
+    ret = unix2win_example();
+
+    return ret;
+}
+
+
diff --git a/privatemodules/nc4/share/hdf5_examples/c/h5_extend.c b/privatemodules/nc4/share/hdf5_examples/c/h5_extend.c
new file mode 100644
index 0000000000000000000000000000000000000000..105e553919a819cb4fce2aa9dc2ab5c2ec05f235
--- /dev/null
+++ b/privatemodules/nc4/share/hdf5_examples/c/h5_extend.c
@@ -0,0 +1,146 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ *  This example how to work with extendible datasets. The dataset 
+ *  must be chunked in order to be extendible.
+ * 
+ *  It is used in the HDF5 Tutorial.
+ */
+
+
+#include "hdf5.h"
+
+#define FILENAME    "extend.h5"
+#define DATASETNAME "ExtendibleArray"
+#define RANK         2
+
+int
+main (void)
+{
+    hid_t        file;                          /* handles */
+    hid_t        dataspace, dataset;  
+    hid_t        filespace, memspace;
+    hid_t        prop;                     
+
+    hsize_t      dims[2]  = {3, 3};           /* dataset dimensions at creation time */		
+    hsize_t      maxdims[2] = {H5S_UNLIMITED, H5S_UNLIMITED};
+    herr_t       status;                             
+    hsize_t      chunk_dims[2] = {2, 5};
+    int          data[3][3] = { {1, 1, 1},    /* data to write */
+                                {1, 1, 1},
+                                {1, 1, 1} };      
+
+    /* Variables used in extending and writing to the extended portion of dataset */
+    hsize_t      size[2];
+    hsize_t      offset[2];
+    hsize_t      dimsext[2] = {7, 3};         /* extend dimensions */
+    int          dataext[7][3] = { {2, 3, 4}, 
+                                   {2, 3, 4}, 
+                                   {2, 3, 4}, 
+                                   {2, 3, 4}, 
+                                   {2, 3, 4}, 
+                                   {2, 3, 4}, 
+                                   {2, 3, 4} };
+
+    /* Variables used in reading data back */
+    hsize_t      chunk_dimsr[2];
+    hsize_t      dimsr[2];
+    hsize_t      i, j;
+    int          rdata[10][3];
+    herr_t       status_n;                             
+    int          rank, rank_chunk;
+
+    /* Create the data space with unlimited dimensions. */
+    dataspace = H5Screate_simple (RANK, dims, maxdims); 
+
+    /* Create a new file. If file exists its contents will be overwritten. */
+    file = H5Fcreate (FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /* Modify dataset creation properties, i.e. enable chunking  */
+    prop = H5Pcreate (H5P_DATASET_CREATE);
+    status = H5Pset_chunk (prop, RANK, chunk_dims);
+
+    /* Create a new dataset within the file using chunk 
+       creation properties.  */
+    dataset = H5Dcreate2 (file, DATASETNAME, H5T_NATIVE_INT, dataspace,
+                         H5P_DEFAULT, prop, H5P_DEFAULT);
+
+    /* Write data to dataset */
+    status = H5Dwrite (dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL,
+                       H5P_DEFAULT, data);
+
+    /* Extend the dataset. Dataset becomes 10 x 3  */
+    size[0] = dims[0]+ dimsext[0];
+    size[1] = dims[1];
+    status = H5Dset_extent (dataset, size);
+
+    /* Select a hyperslab in extended portion of dataset  */
+    filespace = H5Dget_space (dataset);
+    offset[0] = 3;
+    offset[1] = 0;
+    status = H5Sselect_hyperslab (filespace, H5S_SELECT_SET, offset, NULL,
+                                  dimsext, NULL);  
+
+    /* Define memory space */
+    memspace = H5Screate_simple (RANK, dimsext, NULL); 
+
+    /* Write the data to the extended portion of dataset  */
+    status = H5Dwrite (dataset, H5T_NATIVE_INT, memspace, filespace,
+                       H5P_DEFAULT, dataext);
+
+    /* Close resources */
+    status = H5Dclose (dataset);
+    status = H5Pclose (prop);
+    status = H5Sclose (dataspace);
+    status = H5Sclose (memspace);
+    status = H5Sclose (filespace);
+    status = H5Fclose (file);
+
+    /********************************************
+     * Re-open the file and read the data back. *
+     ********************************************/
+
+    file = H5Fopen (FILENAME, H5F_ACC_RDONLY, H5P_DEFAULT);
+    dataset = H5Dopen2 (file, DATASETNAME, H5P_DEFAULT);
+
+    filespace = H5Dget_space (dataset);
+    rank = H5Sget_simple_extent_ndims (filespace);
+    status_n = H5Sget_simple_extent_dims (filespace, dimsr, NULL);
+
+    prop = H5Dget_create_plist (dataset);
+
+    if (H5D_CHUNKED == H5Pget_layout (prop)) 
+       rank_chunk = H5Pget_chunk (prop, rank, chunk_dimsr);
+
+    memspace = H5Screate_simple (rank, dimsr, NULL);
+    status = H5Dread (dataset, H5T_NATIVE_INT, memspace, filespace,
+                      H5P_DEFAULT, rdata);
+
+    printf("\n");
+    printf("Dataset: \n");
+    for (j = 0; j < dimsr[0]; j++)
+    {
+       for (i = 0; i < dimsr[1]; i++)
+           printf("%d ", rdata[j][i]);
+       printf("\n");
+    }
+
+    status = H5Pclose (prop);
+    status = H5Dclose (dataset);
+    status = H5Sclose (filespace);
+    status = H5Sclose (memspace);
+    status = H5Fclose (file);
+}
diff --git a/privatemodules/nc4/share/hdf5_examples/c/h5_extend_write.c b/privatemodules/nc4/share/hdf5_examples/c/h5_extend_write.c
new file mode 100644
index 0000000000000000000000000000000000000000..74f6c01d5119570714a89d5c2f04ae7394953ef5
--- /dev/null
+++ b/privatemodules/nc4/share/hdf5_examples/c/h5_extend_write.c
@@ -0,0 +1,189 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ *   This example shows how to work with extendible dataset.
+ *   In the current version of the library dataset MUST be
+ *   chunked.
+ *
+ */
+
+#include "hdf5.h"
+
+#define H5FILE_NAME        "SDSextendible.h5"
+#define DATASETNAME "ExtendibleArray"
+#define RANK         2
+#define NX     10
+#define NY     5
+
+int
+main (void)
+{
+    hid_t       file;                          /* handles */
+    hid_t       dataspace, dataset;
+    hid_t       filespace;
+    hid_t       cparms;
+    hsize_t      dims[2]  = { 3, 3};            /*
+						 * dataset dimensions
+						 * at the creation time
+						 */
+    hsize_t      dims1[2] = { 3, 3};            /* data1 dimensions */
+    hsize_t      dims2[2] = { 7, 1};            /* data2 dimensions */
+    hsize_t      dims3[2] = { 2, 2};            /* data3 dimensions */
+
+    hsize_t      maxdims[2] = {H5S_UNLIMITED, H5S_UNLIMITED};
+    hsize_t      chunk_dims[2] ={2, 5};
+    hsize_t      size[2];
+    hsize_t      offset[2];
+
+    herr_t      status;
+
+    int         data1[3][3] = { {1, 1, 1},       /* data to write */
+				{1, 1, 1},
+				{1, 1, 1} };
+
+    int         data2[7]    = { 2, 2, 2, 2, 2, 2, 2};
+
+    int         data3[2][2] = { {3, 3},
+				{3, 3} };
+    int fillvalue = 0;
+
+    /*
+     * Create the data space with unlimited dimensions.
+     */
+    dataspace = H5Screate_simple(RANK, dims, maxdims);
+
+    /*
+     * Create a new file. If file exists its contents will be overwritten.
+     */
+    file = H5Fcreate(H5FILE_NAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /*
+     * Modify dataset creation properties, i.e. enable chunking.
+     */
+    cparms = H5Pcreate(H5P_DATASET_CREATE);
+    status = H5Pset_chunk( cparms, RANK, chunk_dims);
+    status = H5Pset_fill_value (cparms, H5T_NATIVE_INT, &fillvalue );
+
+    /*
+     * Create a new dataset within the file using cparms
+     * creation properties.
+     */
+    dataset = H5Dcreate2(file, DATASETNAME, H5T_NATIVE_INT, dataspace, H5P_DEFAULT,
+			cparms, H5P_DEFAULT);
+
+    /*
+     * Extend the dataset. This call assures that dataset is at least 3 x 3.
+     */
+    size[0]   = 3;
+    size[1]   = 3;
+    status = H5Dset_extent(dataset, size);
+
+    /*
+     * Select a hyperslab.
+     */
+    filespace = H5Dget_space(dataset);
+    offset[0] = 0;
+    offset[1] = 0;
+    status = H5Sselect_hyperslab(filespace, H5S_SELECT_SET, offset, NULL,
+				 dims1, NULL);
+
+    /*
+     * Write the data to the hyperslab.
+     */
+    status = H5Dwrite(dataset, H5T_NATIVE_INT, dataspace, filespace,
+		      H5P_DEFAULT, data1);
+
+    /*
+     * Extend the dataset. Dataset becomes 10 x 3.
+     */
+    dims[0]   = dims1[0] + dims2[0];
+    size[0]   = dims[0];
+    size[1]   = dims[1];
+    status = H5Dset_extent(dataset, size);
+
+    /*
+     * Select a hyperslab.
+     */
+    filespace = H5Dget_space(dataset);
+    offset[0] = 3;
+    offset[1] = 0;
+    status = H5Sselect_hyperslab(filespace, H5S_SELECT_SET, offset, NULL,
+				 dims2, NULL);
+
+    /*
+     * Define memory space
+     */
+    dataspace = H5Screate_simple(RANK, dims2, NULL);
+
+    /*
+     * Write the data to the hyperslab.
+     */
+    status = H5Dwrite(dataset, H5T_NATIVE_INT, dataspace, filespace,
+		      H5P_DEFAULT, data2);
+
+    /*
+     * Extend the dataset. Dataset becomes 10 x 5.
+     */
+    dims[1]   = dims1[1] + dims3[1];
+    size[0]   = dims[0];
+    size[1]   = dims[1];
+    status = H5Dset_extent(dataset, size);
+
+    /*
+     * Select a hyperslab
+     */
+    filespace = H5Dget_space(dataset);
+    offset[0] = 0;
+    offset[1] = 3;
+    status = H5Sselect_hyperslab(filespace, H5S_SELECT_SET, offset, NULL,
+				 dims3, NULL);
+
+    /*
+     * Define memory space.
+     */
+    dataspace = H5Screate_simple(RANK, dims3, NULL);
+
+    /*
+     * Write the data to the hyperslab.
+     */
+    status = H5Dwrite(dataset, H5T_NATIVE_INT, dataspace, filespace,
+		      H5P_DEFAULT, data3);
+
+    /*
+     * Resulting dataset
+     *
+     *	 3 3 3 2 2
+     *	 3 3 3 2 2
+     *	 3 3 3 0 0
+     *	 2 0 0 0 0
+     *	 2 0 0 0 0
+     *	 2 0 0 0 0
+     *	 2 0 0 0 0
+     *	 2 0 0 0 0
+     *	 2 0 0 0 0
+     *	 2 0 0 0 0
+     */
+    /*
+     * Close/release resources.
+     */
+    H5Dclose(dataset);
+    H5Sclose(dataspace);
+    H5Sclose(filespace);
+    H5Pclose(cparms);
+    H5Fclose(file);
+
+    return 0;
+}
diff --git a/privatemodules/nc4/share/hdf5_examples/c/h5_extlink.c b/privatemodules/nc4/share/hdf5_examples/c/h5_extlink.c
new file mode 100644
index 0000000000000000000000000000000000000000..e8a24b878a93009484b9f21525cebea5a12954d2
--- /dev/null
+++ b/privatemodules/nc4/share/hdf5_examples/c/h5_extlink.c
@@ -0,0 +1,673 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/* This program demonstrates how to create and use "external links" in
+ * HDF5.
+ *
+ * External links point from one HDF5 file to an object (Group, Dataset, or
+ * committed Datatype) in another file.
+ */
+
+#include "hdf5.h"
+#include <string.h>
+
+#define SOURCE_FILE "extlink_source.h5"
+#define TARGET_FILE "extlink_target.h5"
+
+#define PREFIX_SOURCE_FILE "extlink_prefix_source.h5"
+
+#define SOFT_LINK_FILE "soft_link.h5"
+#define SOFT_LINK_NAME "soft_link_to_group"
+#define UD_SOFT_LINK_NAME "ud_soft_link"
+#define TARGET_GROUP "target_group"
+
+#define UD_SOFT_CLASS 65
+
+#define HARD_LINK_FILE "hard_link.h5"
+#define HARD_LINK_NAME "hard_link_to_group"
+#define UD_HARD_LINK_NAME "ud_hard_link"
+
+#define UD_HARD_CLASS 66
+
+#define PLIST_LINK_PROP "plist_link_prop"
+#define UD_PLIST_CLASS 66
+
+
+
+/* Basic external link example
+ *
+ * Creates two files and uses an external link to access an object in the
+ * second file from the first file.
+ */
+static void extlink_example(void)
+{
+    hid_t source_file_id, targ_file_id;
+    hid_t group_id, group2_id;
+
+    /* Create two files, a source and a target */
+    source_file_id = H5Fcreate(SOURCE_FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    targ_file_id = H5Fcreate(TARGET_FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /* Create a group in the target file for the external link to point to. */
+    group_id = H5Gcreate2(targ_file_id, "target_group", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+
+    /* Close the group and the target file */
+    H5Gclose(group_id);
+
+    /* Create an external link in the source file pointing to the target group.
+     * We could instead have created the external link first, then created the
+     * group it points to; the order doesn't matter.
+     */
+    H5Lcreate_external(TARGET_FILE, "target_group", source_file_id, "ext_link", H5P_DEFAULT, H5P_DEFAULT);
+
+    /* Now we can use the external link to create a new group inside the
+     * target group (even though the target file is closed!).  The external
+     * link works just like a soft link.
+     */
+    group_id = H5Gcreate2(source_file_id, "ext_link/new_group", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+
+    /* The group is inside the target file and we can access it normally.
+     * Here, group_id and group2_id point to the same group inside the
+     * target file.
+     */
+    group2_id = H5Gopen2(targ_file_id, "target_group/new_group", H5P_DEFAULT);
+
+    /* Don't forget to close the IDs we opened. */
+    H5Gclose(group2_id);
+    H5Gclose(group_id);
+
+    H5Fclose(targ_file_id);
+    H5Fclose(source_file_id);
+
+    /* The link from the source file to the target file will work as long as
+     * the target file can be found.  If the target file is moved, renamed,
+     * or deleted in the filesystem, HDF5 won't be able to find it and the
+     * external link will "dangle."
+     */
+}
+
+
+/* External link prefix example
+ *
+ * Uses a group access property list to set a "prefix" for the filenames
+ * accessed through an external link.
+ *
+ * Group access property lists inherit from link access property lists;
+ * the external link prefix property is actually a property of LAPLs.
+ *
+ * This example requires a "red" directory and a "blue" directory to exist
+ * where it is run (so to run this example on Unix, first mkdir red and mkdir
+ * blue).
+ */
+static void extlink_prefix_example(void)
+{
+    hid_t source_file_id, red_file_id, blue_file_id;
+    hid_t group_id, group2_id;
+    hid_t gapl_id;
+
+    /* Create three files, a source and two targets.  The targets will have
+     * the same name, but one will be located in the red directory and one will
+     * be located in the blue directory */
+    source_file_id = H5Fcreate(PREFIX_SOURCE_FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    red_file_id = H5Fcreate("red/prefix_target.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    blue_file_id = H5Fcreate("blue/prefix_target.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /* This test needs a red and a blue directory in the filesystem. If they're not present,
+     * trying to create the files above will fail.
+     */
+    if(red_file_id < 0 || blue_file_id < 0)
+      printf("This test requires directories named 'red' and 'blue' to exist. Did you forget to create them?\n");
+
+    /* Create an external link in the source file pointing to the root group of
+     * a file named prefix_target.h5.  This file doesn't exist in the current
+     * directory, but the files in the red and blue directories both have this
+     * name.
+     */
+    H5Lcreate_external("prefix_target.h5", "/", source_file_id, "ext_link", H5P_DEFAULT, H5P_DEFAULT);
+
+    /* If we tried to traverse the external link now, we would fail (since the
+     * file it points to doesn't exist).  Instead, we'll create a group access
+     * property list that will provide a prefix path to the external link.
+     * Group access property lists inherit the properties of link access
+     * property lists.
+     */
+    gapl_id = H5Pcreate(H5P_GROUP_ACCESS);
+    H5Pset_elink_prefix(gapl_id, "red/");
+
+    /* Now if we traverse the external link, HDF5 will look for an external
+     * file named red/prefix_target.h5, which exists.
+     * To pass the group access property list, we need to use H5Gopen2.
+     */
+    group_id = H5Gopen2(source_file_id, "ext_link", gapl_id);
+
+    /* Now we can use the open group ID to create a new group inside the
+     * "red" file.
+     */
+    group2_id = H5Gcreate2(group_id, "pink", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+
+    /* Close both groups. */
+    H5Gclose(group2_id);
+    H5Gclose(group_id);
+
+    /* If we change the prefix, the same external link can find a file in the blue
+     * directory.
+     */
+    H5Pset_elink_prefix(gapl_id, "blue/");
+    group_id = H5Gopen2(source_file_id, "ext_link", gapl_id);
+    group2_id = H5Gcreate2(group_id, "sky blue", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+
+    /* Close both groups. */
+    H5Gclose(group2_id);
+    H5Gclose(group_id);
+
+    /* Each file has had a group created inside it using the same external link. */
+    group_id = H5Gopen2(red_file_id, "pink", H5P_DEFAULT);
+    group2_id = H5Gopen2(blue_file_id, "sky blue", H5P_DEFAULT);
+
+    /* Clean up our open IDs */
+    H5Gclose(group2_id);
+    H5Gclose(group_id);
+    H5Pclose(gapl_id);
+    H5Fclose(blue_file_id);
+    H5Fclose(red_file_id);
+    H5Fclose(source_file_id);
+
+    /* User-defined links can expand on the ability to pass in parameters
+     * using an access property list; for instance, a user-defined link
+     * might function like an external link but allow the full filename to be
+     * passed in through the access property list.
+     */
+}
+
+
+/* Soft Link example
+ *
+ * Create a new class of user-defined links that behave like HDF5's built-in
+ * soft links.
+ *
+ * This isn't very useful by itself (HDF5's soft links already do the same
+ * thing), but it can serve as an example for how to reference objects by
+ * name.
+ */
+
+/* We need to define the callback function that the soft link will use.
+ * It is defined after the example below.
+ * To keep the example simple, these links don't have a query callback.
+ * In general, link classes should always be query-able.
+ * We might also have wanted to supply a creation callback that checks
+ * that a path was supplied in the udata.
+ */
+static hid_t UD_soft_traverse(const char *link_name, hid_t cur_group,
+    const void *udata, size_t udata_size, hid_t lapl_id);
+
+static void soft_link_example(void)
+{
+    hid_t file_id;
+    hid_t group_id;
+    /* Define the link class that we'll use to register "user-defined soft
+     * links" using the callbacks we defined above.
+     * A link class can have NULL for any callback except its traverse
+     * callback.
+     */
+    const H5L_class_t UD_soft_class[1] = {{
+        H5L_LINK_CLASS_T_VERS,      /* Version number for this struct.
+                                     * This field is always H5L_LINK_CLASS_T_VERS */
+        (H5L_type_t)UD_SOFT_CLASS,  /* Link class id number. This can be any
+                                     * value between H5L_TYPE_UD_MIN (64) and
+                                     * H5L_TYPE_MAX (255). It should be a
+                                     * value that isn't already being used by
+                                     * another kind of link. We'll use 65. */
+        "UD_soft_link",             /* Link class name for debugging  */
+        NULL,                       /* Creation callback              */
+        NULL,                       /* Move callback                  */
+        NULL,                       /* Copy callback                  */
+        UD_soft_traverse,           /* The actual traversal function  */
+        NULL,                       /* Deletion callback              */
+        NULL                        /* Query callback                 */
+    }};
+
+
+    /* First, create a file and an object within the file for the link to
+     * point to.
+     */
+    file_id = H5Fcreate(SOFT_LINK_FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    group_id = H5Gcreate2(file_id, TARGET_GROUP, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+    H5Gclose(group_id);
+
+    /* This is how we create a normal soft link to the group.
+     */
+    H5Lcreate_soft(TARGET_GROUP, file_id, SOFT_LINK_NAME, H5P_DEFAULT, H5P_DEFAULT);
+
+    /* To do the same thing using a user-defined link, we first have to
+     * register the link class we defined.
+     */
+    H5Lregister(UD_soft_class);
+
+    /* Now create a user-defined link.  We give it the path to the group
+     * as its udata.1
+     */
+    H5Lcreate_ud(file_id, UD_SOFT_LINK_NAME, (H5L_type_t)UD_SOFT_CLASS, TARGET_GROUP,
+                 strlen(TARGET_GROUP) + 1, H5P_DEFAULT, H5P_DEFAULT);
+
+    /* We can access the group through the UD soft link like we would through
+     * a normal soft link. This link will still dangle if the object's
+     * original name is changed or unlinked.
+     */
+    group_id = H5Gopen2(file_id, UD_SOFT_LINK_NAME, H5P_DEFAULT);
+
+    /* The group is now open normally.  Don't forget to close it! */
+    H5Gclose(group_id);
+
+    H5Fclose(file_id);
+}
+
+/* UD_soft_traverse
+ * The actual traversal function simply needs to open the correct object by
+ * name and return its ID.
+ */
+
+static hid_t UD_soft_traverse(const char *link_name, hid_t cur_group,
+    const void *udata, size_t udata_size, hid_t lapl_id)
+{
+    const char *target = (const char *) udata;
+    hid_t ret_value;
+
+    /* Pass the udata straight through to HDF5. If it's invalid, let HDF5
+     * return an error.
+     */
+    ret_value = H5Oopen(cur_group, target, lapl_id);
+    return ret_value;
+}
+
+
+/* Hard Link example
+ *
+ * Create a new class of user-defined links that behave like HDF5's built-in
+ * hard links.
+ *
+ * This isn't very useful by itself (HDF5's hard links already do the same
+ * thing), but it can serve as an example for how to reference objects by
+ * address.
+ */
+
+/* We need to define the callback functions that the hard link will use.
+ * These are defined after the example below.
+ * To keep the example simple, these links don't have a query callback.
+ * Generally, real link classes should always be query-able.
+ */
+static herr_t UD_hard_create(const char *link_name, hid_t loc_group,
+    const void *udata, size_t udata_size, hid_t lcpl_id);
+static herr_t UD_hard_delete(const char *link_name, hid_t loc_group,
+    const void *udata, size_t udata_size);
+static hid_t UD_hard_traverse(const char *link_name, hid_t cur_group,
+    const void *udata, size_t udata_size, hid_t lapl_id);
+
+static void hard_link_example(void)
+{
+    hid_t file_id;
+    hid_t group_id;
+    H5L_info_t li;
+    /* Define the link class that we'll use to register "user-defined hard
+     * links" using the callbacks we defined above.
+     * A link class can have NULL for any callback except its traverse
+     * callback.
+     */
+    const H5L_class_t UD_hard_class[1] = {{
+        H5L_LINK_CLASS_T_VERS,      /* Version number for this struct.
+                                     * This field is always H5L_LINK_CLASS_T_VERS */
+        (H5L_type_t)UD_HARD_CLASS,  /* Link class id number. This can be any
+                                     * value between H5L_TYPE_UD_MIN (64) and
+                                     * H5L_TYPE_MAX (255). It should be a
+                                     * value that isn't already being used by
+                                     * another kind of link. We'll use 66. */
+        "UD_hard_link",             /* Link class name for debugging  */
+        UD_hard_create,             /* Creation callback              */
+        NULL,                       /* Move callback                  */
+        NULL,                       /* Copy callback                  */
+        UD_hard_traverse,           /* The actual traversal function  */
+        UD_hard_delete,             /* Deletion callback              */
+        NULL                        /* Query callback                 */
+    }};
+
+
+    /* First, create a file and an object within the file for the link to
+     * point to.
+     */
+    file_id = H5Fcreate(HARD_LINK_FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    group_id = H5Gcreate2(file_id, TARGET_GROUP, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+    H5Gclose(group_id);
+
+    /* This is how we create a normal hard link to the group. This
+     * creates a second "name" for the group.
+     */
+    H5Lcreate_hard(file_id, TARGET_GROUP, file_id, HARD_LINK_NAME, H5P_DEFAULT, H5P_DEFAULT);
+
+    /* To do the same thing using a user-defined link, we first have to
+     * register the link class we defined.
+     */
+    H5Lregister(UD_hard_class);
+
+    /* Since hard links link by object address, we'll need to retrieve
+     * the target group's address. We do this by calling H5Lget_info
+     * on a hard link to the object.
+     */
+    H5Lget_info(file_id, TARGET_GROUP, &li, H5P_DEFAULT);
+
+    /* Now create a user-defined link.  We give it the group's address
+     * as its udata.
+     */
+    H5Lcreate_ud(file_id, UD_HARD_LINK_NAME, (H5L_type_t)UD_HARD_CLASS, &(li.u.address),
+                 sizeof(li.u.address), H5P_DEFAULT, H5P_DEFAULT);
+
+    /* The UD hard link has now incremented the group's reference count
+     * like a normal hard link would.  This means that we can unlink the
+     * other two links to that group and it won't be deleted until the
+     * UD hard link is deleted.
+     */
+    H5Ldelete(file_id, TARGET_GROUP, H5P_DEFAULT);
+    H5Ldelete(file_id, HARD_LINK_NAME, H5P_DEFAULT);
+
+    /* The group is still accessible through the UD hard link. If this were
+     * a soft link instead, the object would have been deleted when the last
+     * hard link to it was unlinked. */
+    group_id = H5Gopen2(file_id, UD_HARD_LINK_NAME, H5P_DEFAULT);
+
+    /* The group is now open normally.  Don't forget to close it! */
+    H5Gclose(group_id);
+
+    /* Removing the user-defined hard link will delete the group. */
+    H5Ldelete(file_id, UD_HARD_LINK_NAME, H5P_DEFAULT);
+
+    H5Fclose(file_id);
+}
+
+/* Callbacks for User-defined hard links. */
+/* UD_hard_create
+ * The most important thing this callback does is to increment the reference
+ * count on the target object. Without this step, the object could be
+ * deleted while this link still pointed to it, resulting in possible data
+ * corruption!
+ * The create callback also checks the arguments used to create this link.
+ * If this function returns a negative value, the call to H5Lcreate_ud()
+ * will also return failure and the link will not be created.
+ */
+static herr_t UD_hard_create(const char *link_name, hid_t loc_group,
+    const void *udata, size_t udata_size, hid_t lcpl_id)
+{
+    haddr_t addr;
+    hid_t target_obj = -1;
+    herr_t ret_value = 0;
+
+    /* Make sure that the address passed in looks valid */
+    if(udata_size != sizeof(haddr_t))
+    {
+      ret_value = -1;
+      goto done;
+    }
+
+    addr = *((const haddr_t *) udata);
+
+    /* Open the object this link points to so that we can increment
+     * its reference count. This also ensures that the address passed
+     * in points to a real object (although this check is not perfect!) */
+    target_obj= H5Oopen_by_addr(loc_group, addr);
+    if(target_obj < 0)
+    {
+      ret_value = -1;
+      goto done;
+    }
+
+    /* Increment the reference count of the target object */
+    if(H5Oincr_refcount(target_obj) < 0)
+    {
+      ret_value = -1;
+      goto done;
+    }
+
+done:
+    /* Close the target object if we opened it */
+    if(target_obj >= 0)
+        H5Oclose(target_obj);
+    return ret_value;
+}
+
+/* UD_hard_delete
+ * Since the creation function increments the object's reference count, it's
+ * important to decrement it again when the link is deleted.
+ */
+static herr_t UD_hard_delete(const char *link_name, hid_t loc_group,
+    const void *udata, size_t udata_size)
+{
+    haddr_t addr;
+    hid_t target_obj = -1;
+    herr_t ret_value = 0;
+
+    /* Sanity check; we have already verified the udata's size in the creation
+     * callback.
+     */
+    if(udata_size != sizeof(haddr_t))
+    {
+      ret_value = -1;
+      goto done;
+    }
+
+    addr = *((const haddr_t *) udata);
+
+    /* Open the object this link points to */
+    target_obj= H5Oopen_by_addr(loc_group, addr);
+    if(target_obj < 0)
+    {
+      ret_value = -1;
+      goto done;
+    }
+
+    /* Decrement the reference count of the target object */
+    if(H5Odecr_refcount(target_obj) < 0)
+    {
+      ret_value = -1;
+      goto done;
+    }
+
+done:
+    /* Close the target object if we opened it */
+    if(target_obj >= 0)
+        H5Oclose(target_obj);
+    return ret_value;
+}
+
+/* UD_hard_traverse
+ * The actual traversal function simply needs to open the correct object and
+ * return its ID.
+ */
+static hid_t UD_hard_traverse(const char *link_name, hid_t cur_group,
+    const void *udata, size_t udata_size, hid_t lapl_id)
+{
+    haddr_t       addr;
+    hid_t         ret_value = -1;
+
+    /* Sanity check; we have already verified the udata's size in the creation
+     * callback.
+     */
+    if(udata_size != sizeof(haddr_t))
+      return -1;
+
+    addr = *((const haddr_t *) udata);
+
+    /* Open the object by address. If H5Oopen_by_addr fails, ret_value will
+     * be negative to indicate that the traversal function failed.
+     */
+    ret_value = H5Oopen_by_addr(cur_group, addr);
+
+    return ret_value;
+}
+
+
+
+/* Plist example
+ *
+ * Create a new class of user-defined links that open objects within a file
+ * based on a value passed in through a link access property list.
+ *
+ * Group, dataset, and datatype access property lists all inherit from link
+ * access property lists, so they can be used instead of LAPLs.
+ */
+
+/* We need to define the callback functions that this link type will use.
+ * These are defined after the example below.
+ * These links have no udata, so they don't need a query function.
+ */
+static hid_t UD_plist_traverse(const char *link_name, hid_t cur_group,
+    const void *udata, size_t udata_size, hid_t lapl_id);
+
+static void plist_link_example(void)
+{
+    hid_t file_id;
+    hid_t group_id, group2_id;
+    hid_t gapl_id;
+    char *path = NULL;
+
+    /* Define the link class that we'll use to register "plist
+     * links" using the callback we defined above.
+     * A link class can have NULL for any callback except its traverse
+     * callback.
+     */
+    const H5L_class_t UD_plist_class[1] = {{
+        H5L_LINK_CLASS_T_VERS,      /* Version number for this struct.
+                                     * This field is always H5L_LINK_CLASS_T_VERS */
+        (H5L_type_t)UD_PLIST_CLASS, /* Link class id number. This can be any
+                                     * value between H5L_TYPE_UD_MIN (64) and
+                                     * H5L_TYPE_MAX (255). It should be a
+                                     * value that isn't already being used by
+                                     * another kind of link. We'll use 67. */
+        "UD_plist_link",            /* Link class name for debugging  */
+        NULL,                       /* Creation callback              */
+        NULL,                       /* Move callback                  */
+        NULL,                       /* Copy callback                  */
+        UD_plist_traverse,          /* The actual traversal function  */
+        NULL,                       /* Deletion callback              */
+        NULL                        /* Query callback                 */
+    }};
+
+
+    /* First, create a file and two objects within the file for the link to
+     * point to.
+     */
+    file_id = H5Fcreate(HARD_LINK_FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    group_id = H5Gcreate2(file_id, "group_1", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+    H5Gclose(group_id);
+    group_id = H5Gcreate2(file_id, "group_1/group_2", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+    H5Gclose(group_id);
+
+    /* Register "plist links" and create one.  It has no udata at all. */
+    H5Lregister(UD_plist_class);
+    H5Lcreate_ud(file_id, "plist_link", (H5L_type_t)UD_PLIST_CLASS, NULL, 0,
+                 H5P_DEFAULT, H5P_DEFAULT);
+
+    /* Create a group access property list to pass in the target for the
+     * plist link.
+     */
+    gapl_id = H5Pcreate(H5P_GROUP_ACCESS);
+
+    /* There is no HDF5 API for setting the property that controls these
+     * links, so we have to add the property manually
+     */
+    H5Pinsert2(gapl_id, PLIST_LINK_PROP, sizeof(const char *), &(path), NULL, NULL, NULL, NULL, NULL, NULL);
+
+    /* Set the property to point to the first group. */
+    path = "group_1";
+    H5Pset(gapl_id, PLIST_LINK_PROP, &path);
+
+    /* Open the first group through the plist link using the GAPL we just
+     * created */
+    group_id = H5Gopen2(file_id, "plist_link", gapl_id);
+
+    /* If we change the value set on the property list, it will change where
+     * the plist link points.
+     */
+    path = "group_1/group_2";
+    H5Pset(gapl_id, PLIST_LINK_PROP, &path);
+    group2_id = H5Gopen2(file_id, "plist_link", gapl_id);
+
+    /* group_id points to group_1 and group2_id points to group_2, both opened
+     * through the same link.
+     * Using more than one of this type of link could quickly become confusing,
+     * since they will all use the same property list; however, there is
+     * nothing to prevent the links from changing the property list in their
+     * traverse callbacks.
+     */
+
+    /* Clean up */
+    H5Pclose(gapl_id);
+    H5Gclose(group_id);
+    H5Gclose(group2_id);
+    H5Fclose(file_id);
+}
+
+/* Traversal callback for User-defined plist links. */
+/* UD_plist_traverse
+ * Open a path passed in through the property list.
+ */
+static hid_t UD_plist_traverse(const char *link_name, hid_t cur_group,
+    const void *udata, size_t udata_size, hid_t lapl_id)
+{
+    char *        path;
+    hid_t         ret_value = -1;
+
+    /* If the link property isn't set or can't be found, traversal fails. */
+    if(H5Pexist(lapl_id, PLIST_LINK_PROP) < 0)
+        goto error;
+
+    if(H5Pget(lapl_id, PLIST_LINK_PROP, &path) < 0)
+        goto error;
+
+    /* Open the object by address. If H5Oopen_by_addr fails, ret_value will
+     * be negative to indicate that the traversal function failed.
+     */
+    ret_value = H5Oopen(cur_group, path, lapl_id);
+
+    return ret_value;
+
+error:
+    return -1;
+}
+
+
+
+/* Main function
+ *
+ * Invokes the example functions.
+ */
+ int
+main(void)
+{
+    printf("Testing basic external links.\n");
+    extlink_example();
+
+    printf("Testing external link prefixes.\n");
+    extlink_prefix_example();
+
+    printf("Testing user-defined soft links.\n");
+    soft_link_example();
+
+    printf("Testing user-defined hard links.\n");
+    hard_link_example();
+
+    printf("Testing user-defined property list links.\n");
+    plist_link_example();
+
+    return 0;
+}
+
+
diff --git a/privatemodules/nc4/share/hdf5_examples/c/h5_group.c b/privatemodules/nc4/share/hdf5_examples/c/h5_group.c
new file mode 100644
index 0000000000000000000000000000000000000000..6b73210d8e82bee7171a2775ff2adc3eaecf7ded
--- /dev/null
+++ b/privatemodules/nc4/share/hdf5_examples/c/h5_group.c
@@ -0,0 +1,261 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * This program creates a group in the file and two datasets in the group.
+ * Hard link to the group object is created and one of the datasets is accessed
+ * under new name.
+ * Iterator functions are used to find information about the objects
+ * in the root group and in the created group.
+ */
+
+
+#include "hdf5.h"
+
+
+#define H5FILE_NAME    "group.h5"
+#define RANK    2
+
+static herr_t file_info(hid_t loc_id, const char *name, const H5L_info_t *linfo,
+    void *opdata);              /* Link iteration operator function */
+static herr_t group_info(hid_t loc_id, const char *name, const H5L_info_t *linfo,
+    void *opdata);              /* Link iteration operator function */
+int
+main(void)
+{
+
+    hid_t    file;
+    hid_t    grp;
+    hid_t    dataset, dataspace;
+    hid_t    plist;
+
+    herr_t   status;
+    hsize_t  dims[2];
+    hsize_t  cdims[2];
+
+    int      idx_f, idx_g;
+
+    /*
+     * Create a file.
+     */
+    file = H5Fcreate(H5FILE_NAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /*
+     * Create a group in the file.
+     */
+    grp = H5Gcreate2(file, "/Data", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+
+    /*
+     * Create dataset "Compressed Data" in the group using absolute
+     * name. Dataset creation property list is modified to use
+     * GZIP compression with the compression effort set to 6.
+     * Note that compression can be used only when dataset is chunked.
+     */
+    dims[0] = 1000;
+    dims[1] = 20;
+    cdims[0] = 20;
+    cdims[1] = 20;
+    dataspace = H5Screate_simple(RANK, dims, NULL);
+    plist     = H5Pcreate(H5P_DATASET_CREATE);
+                H5Pset_chunk(plist, 2, cdims);
+                H5Pset_deflate( plist, 6);
+    dataset = H5Dcreate2(file, "/Data/Compressed_Data", H5T_NATIVE_INT,
+                        dataspace, H5P_DEFAULT, plist, H5P_DEFAULT);
+    /*
+     * Close the first dataset .
+     */
+    H5Sclose(dataspace);
+    H5Dclose(dataset);
+
+    /*
+     * Create the second dataset.
+     */
+    dims[0] = 500;
+    dims[1] = 20;
+    dataspace = H5Screate_simple(RANK, dims, NULL);
+    dataset = H5Dcreate2(file, "/Data/Float_Data", H5T_NATIVE_FLOAT,
+			dataspace, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+
+    /*
+     *Close the second dataset and file.
+     */
+    H5Sclose(dataspace);
+    H5Dclose(dataset);
+    H5Pclose(plist);
+    H5Gclose(grp);
+    H5Fclose(file);
+
+    /*
+     * Now reopen the file and group in the file.
+     */
+    file = H5Fopen(H5FILE_NAME, H5F_ACC_RDWR, H5P_DEFAULT);
+    grp  = H5Gopen2(file, "Data", H5P_DEFAULT);
+
+    /*
+     * Access "Compressed_Data" dataset in the group.
+     */
+    dataset = H5Dopen2(grp, "Compressed_Data", H5P_DEFAULT);
+    if( dataset < 0) printf(" Dataset 'Compressed-Data' is not found. \n");
+    printf("\"/Data/Compressed_Data\" dataset is open \n");
+
+    /*
+     * Close the dataset.
+     */
+    status = H5Dclose(dataset);
+
+    /*
+     * Create hard link to the Data group.
+     */
+    status = H5Lcreate_hard(file, "Data", H5L_SAME_LOC, "Data_new", H5P_DEFAULT, H5P_DEFAULT);
+
+    /*
+     * We can access "Compressed_Data" dataset using created
+     * hard link "Data_new".
+     */
+    dataset = H5Dopen2(file, "/Data_new/Compressed_Data", H5P_DEFAULT);
+    if( dataset < 0) printf(" Dataset is not found. \n");
+    printf("\"/Data_new/Compressed_Data\" dataset is open \n");
+
+    /*
+     * Close the dataset.
+     */
+    status = H5Dclose(dataset);
+
+
+    /*
+     * Use iterator to see the names of the objects in the root group.
+     */
+    idx_f = H5Literate(file, H5_INDEX_NAME, H5_ITER_INC, NULL, file_info, NULL);
+
+    /*
+     * Unlink  name "Data" and use iterator to see the names
+     * of the objects in the file root direvtory.
+     */
+    if(H5Ldelete(file, "Data", H5P_DEFAULT) < 0)
+      printf(" H5Ldelete failed \n");
+    else
+      printf("\"Data\" is unlinked \n");
+
+    idx_f = H5Literate(file, H5_INDEX_NAME, H5_ITER_INC, NULL, file_info, NULL);
+
+    /*
+     * Use iterator to see the names of the objects in the group
+     * /Data_new.
+     */
+    idx_g = H5Literate_by_name(grp, "/Data_new", H5_INDEX_NAME, H5_ITER_INC, NULL, group_info, NULL, H5P_DEFAULT);
+
+    /*
+     * Close the file.
+     */
+
+    H5Gclose(grp);
+    H5Fclose(file);
+
+    return 0;
+}
+
+/*
+ * Operator function.
+ */
+static herr_t
+file_info(hid_t loc_id, const char *name, const H5L_info_t *linfo, void *opdata)
+{
+    /* avoid compiler warnings */
+    loc_id = loc_id;
+    opdata = opdata;
+    linfo = linfo;
+
+    /*
+     * Display group name. The name is passed to the function by
+     * the Library. Some magic :-)
+     */
+    printf("\nName : %s\n", name);
+
+    return 0;
+}
+
+
+/*
+ * Operator function.
+ */
+static herr_t
+group_info(hid_t loc_id, const char *name, const H5L_info_t *linfo, void *opdata)
+{
+    hid_t did;  /* dataset identifier  */
+    hid_t tid;  /* datatype identifier */
+    H5T_class_t t_class;
+    hid_t pid;  /* data_property identifier */
+    hsize_t chunk_dims_out[2];
+    int  rank_chunk;
+
+    /* avoid warnings */
+    opdata = opdata;
+    linfo = linfo;
+
+    /*
+     * Open the datasets using their names.
+     */
+    did = H5Dopen2(loc_id, name, H5P_DEFAULT);
+
+    /*
+     * Display dataset name.
+     */
+    printf("\nName : %s\n", name);
+
+    /*
+     * Display dataset information.
+     */
+    tid = H5Dget_type(did);  /* get datatype*/
+    pid = H5Dget_create_plist(did); /* get creation property list */
+
+    /*
+     * Check if dataset is chunked.
+     */
+    if(H5D_CHUNKED == H5Pget_layout(pid)) {
+        /*
+         * get chunking information: rank and dimensions.
+         */
+        rank_chunk = H5Pget_chunk(pid, 2, chunk_dims_out);
+        printf("chunk rank %d, dimensions %lu x %lu\n", rank_chunk,
+            (unsigned long)(chunk_dims_out[0]),
+            (unsigned long)(chunk_dims_out[1]));
+    }
+    else {
+        t_class = H5Tget_class(tid);
+        if(t_class < 0) {
+            puts(" Invalid datatype.\n");
+        }
+        else {
+            if(t_class == H5T_INTEGER)
+                puts(" Datatype is 'H5T_NATIVE_INTEGER'.\n");
+            if(t_class == H5T_FLOAT)
+                puts(" Datatype is 'H5T_NATIVE_FLOAT'.\n");
+            if(t_class == H5T_STRING)
+                puts(" Datatype is 'H5T_NATIVE_STRING'.\n");
+            if(t_class == H5T_BITFIELD)
+                puts(" Datatype is 'H5T_NATIVE_BITFIELD'.\n");
+            if(t_class == H5T_OPAQUE)
+                puts(" Datatype is 'H5T_NATIVE_OPAQUE'.\n");
+            if(t_class == H5T_COMPOUND)
+                puts(" Datatype is 'H5T_NATIVE_COMPOUND'.\n");
+        }
+    }
+
+    H5Dclose(did);
+    H5Pclose(pid);
+    H5Tclose(tid);
+    return 0;
+}
+
diff --git a/privatemodules/nc4/share/hdf5_examples/c/h5_mount.c b/privatemodules/nc4/share/hdf5_examples/c/h5_mount.c
new file mode 100644
index 0000000000000000000000000000000000000000..6da71a1fa682eaafee7a48b341eb54a3ab29aef3
--- /dev/null
+++ b/privatemodules/nc4/share/hdf5_examples/c/h5_mount.c
@@ -0,0 +1,133 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * This program shows the concept of "mounting files".
+ * Program creates one file with group G in it, and another
+ * file with dataset D. Then second file is mounted in the first one
+ * under the "mounting point" G. Dataset D is accessed in the first file
+ * under name /G/D and data is printed out.
+ */
+
+#include "hdf5.h"
+
+#define FILE1 "mount1.h5"
+#define FILE2 "mount2.h5"
+
+#define RANK 2
+#define NX 4
+#define NY 5
+
+int main(void)
+{
+
+   hid_t fid1, fid2, gid;  /* Files and group identifiers */
+   hid_t did, tid, sid;    /* Dataset and datatype identifiers */
+
+   herr_t status;
+   hsize_t dims[] = {NX,NY}; /* Dataset dimensions */
+
+   int i, j;
+   int bm[NX][NY], bm_out[NX][NY]; /* Data buffers */
+
+   /*
+    * Initialization of buffer matrix "bm"
+    */
+   for(i =0; i < NX; i++)
+    for(j = 0; j < NY; j++)
+      bm[i][j] = i + j;
+
+   /*
+    * Create first file and a group in it.
+    */
+   fid1 = H5Fcreate(FILE1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+   gid = H5Gcreate2(fid1, "/G", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+
+   /*
+    * Close group and file
+    */
+   H5Gclose(gid);
+   H5Fclose(fid1);
+
+   /*
+    * Create second file and dataset "D" in it.
+    */
+   fid2 = H5Fcreate(FILE2, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+   dims[0] = NX;
+   dims[1] = NY;
+   sid = H5Screate_simple(RANK, dims, NULL);
+   did = H5Dcreate2(fid2, "D", H5T_NATIVE_INT, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+
+   /*
+    * Write data to the dataset.
+    */
+   status = H5Dwrite(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, bm);
+
+   /*
+    * Close all identifiers.
+    */
+   H5Sclose(sid);
+   H5Dclose(did);
+   H5Fclose(fid2);
+
+   /*
+    * Reopen both files
+    */
+   fid1 = H5Fopen(FILE1, H5F_ACC_RDONLY, H5P_DEFAULT);
+   fid2 = H5Fopen(FILE2, H5F_ACC_RDONLY, H5P_DEFAULT);
+
+   /*
+    * Mount second file under G in the first file.
+    */
+   H5Fmount(fid1, "/G", fid2, H5P_DEFAULT);
+
+   /*
+    * Access dataset D in the first file under /G/D name.
+    */
+   did = H5Dopen2(fid1, "/G/D", H5P_DEFAULT);
+   tid = H5Dget_type(did);
+   status = H5Dread(did, tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, bm_out);
+
+   /*
+    * Print out the data.
+    */
+   for(i=0; i<NX; i++){
+    for(j=0; j<NY; j++)
+        printf("  %d", bm_out[i][j]);
+	printf("\n");
+   }
+
+   /*
+    * Close all identifers
+    */
+   H5Tclose(tid);
+   H5Dclose(did);
+
+   /*
+    * Unmounting second file
+    */
+   H5Funmount(fid1, "/G");
+
+   /*
+    * Close both files
+    */
+   H5Fclose(fid1);
+   H5Fclose(fid2);
+
+   return 0;
+}
+
+
+
diff --git a/privatemodules/nc4/share/hdf5_examples/c/h5_rdwt.c b/privatemodules/nc4/share/hdf5_examples/c/h5_rdwt.c
new file mode 100644
index 0000000000000000000000000000000000000000..d5444e0b98aad62625ef9475c7e468d4ea33f482
--- /dev/null
+++ b/privatemodules/nc4/share/hdf5_examples/c/h5_rdwt.c
@@ -0,0 +1,53 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/* 
+ *  This example illustrates how to write and read data in an existing
+ *  dataset.  It is used in the HDF5 Tutorial.
+ */
+
+#include "hdf5.h"
+#define FILE "dset.h5"
+
+int main() {
+
+   hid_t       file_id, dataset_id;  /* identifiers */
+   herr_t      status;
+   int         i, j, dset_data[4][6];
+
+   /* Initialize the dataset. */
+   for (i = 0; i < 4; i++)
+      for (j = 0; j < 6; j++)
+         dset_data[i][j] = i * 6 + j + 1;
+
+   /* Open an existing file. */
+   file_id = H5Fopen(FILE, H5F_ACC_RDWR, H5P_DEFAULT);
+
+   /* Open an existing dataset. */
+   dataset_id = H5Dopen2(file_id, "/dset", H5P_DEFAULT);
+
+   /* Write the dataset. */
+   status = H5Dwrite(dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, 
+                     dset_data);
+
+   status = H5Dread(dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, 
+                    dset_data);
+
+   /* Close the dataset. */
+   status = H5Dclose(dataset_id);
+
+   /* Close the file. */
+   status = H5Fclose(file_id);
+}
diff --git a/privatemodules/nc4/share/hdf5_examples/c/h5_read.c b/privatemodules/nc4/share/hdf5_examples/c/h5_read.c
new file mode 100644
index 0000000000000000000000000000000000000000..6fe75be15d139650aaba0809cc964af079daaedd
--- /dev/null
+++ b/privatemodules/nc4/share/hdf5_examples/c/h5_read.c
@@ -0,0 +1,151 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ *   This example reads hyperslab from the SDS.h5 file
+ *   created by h5_write.c program into two-dimensional
+ *   plane of the three-dimensional array.
+ *   Information about dataset in the SDS.h5 file is obtained.
+ */
+
+#include "hdf5.h"
+
+#define H5FILE_NAME        "SDS.h5"
+#define DATASETNAME "IntArray"
+#define NX_SUB  3           /* hyperslab dimensions */
+#define NY_SUB  4
+#define NX 7           /* output buffer dimensions */
+#define NY 7
+#define NZ  3
+#define RANK         2
+#define RANK_OUT     3
+
+int
+main (void)
+{
+    hid_t       file, dataset;         /* handles */
+    hid_t       datatype, dataspace;
+    hid_t       memspace;
+    H5T_class_t t_class;                 /* data type class */
+    H5T_order_t order;                 /* data order */
+    size_t      size;                  /*
+				        * size of the data element
+				        * stored in file
+				        */
+    hsize_t     dimsm[3];              /* memory space dimensions */
+    hsize_t     dims_out[2];           /* dataset dimensions */
+    herr_t      status;
+
+    int         data_out[NX][NY][NZ ]; /* output buffer */
+
+    hsize_t      count[2];              /* size of the hyperslab in the file */
+    hsize_t      offset[2];             /* hyperslab offset in the file */
+    hsize_t      count_out[3];          /* size of the hyperslab in memory */
+    hsize_t      offset_out[3];         /* hyperslab offset in memory */
+    int          i, j, k, status_n, rank;
+
+    for (j = 0; j < NX; j++) {
+	for (i = 0; i < NY; i++) {
+	    for (k = 0; k < NZ ; k++)
+		data_out[j][i][k] = 0;
+	}
+    }
+
+    /*
+     * Open the file and the dataset.
+     */
+    file = H5Fopen(H5FILE_NAME, H5F_ACC_RDONLY, H5P_DEFAULT);
+    dataset = H5Dopen2(file, DATASETNAME, H5P_DEFAULT);
+
+    /*
+     * Get datatype and dataspace handles and then query
+     * dataset class, order, size, rank and dimensions.
+     */
+    datatype  = H5Dget_type(dataset);     /* datatype handle */
+    t_class     = H5Tget_class(datatype);
+    if (t_class == H5T_INTEGER) printf("Data set has INTEGER type \n");
+    order     = H5Tget_order(datatype);
+    if (order == H5T_ORDER_LE) printf("Little endian order \n");
+
+    size  = H5Tget_size(datatype);
+    printf(" Data size is %d \n", (int)size);
+
+    dataspace = H5Dget_space(dataset);    /* dataspace handle */
+    rank      = H5Sget_simple_extent_ndims(dataspace);
+    status_n  = H5Sget_simple_extent_dims(dataspace, dims_out, NULL);
+    printf("rank %d, dimensions %lu x %lu \n", rank,
+	   (unsigned long)(dims_out[0]), (unsigned long)(dims_out[1]));
+
+    /*
+     * Define hyperslab in the dataset.
+     */
+    offset[0] = 1;
+    offset[1] = 2;
+    count[0]  = NX_SUB;
+    count[1]  = NY_SUB;
+    status = H5Sselect_hyperslab(dataspace, H5S_SELECT_SET, offset, NULL,
+				 count, NULL);
+
+    /*
+     * Define the memory dataspace.
+     */
+    dimsm[0] = NX;
+    dimsm[1] = NY;
+    dimsm[2] = NZ ;
+    memspace = H5Screate_simple(RANK_OUT,dimsm,NULL);
+
+    /*
+     * Define memory hyperslab.
+     */
+    offset_out[0] = 3;
+    offset_out[1] = 0;
+    offset_out[2] = 0;
+    count_out[0]  = NX_SUB;
+    count_out[1]  = NY_SUB;
+    count_out[2]  = 1;
+    status = H5Sselect_hyperslab(memspace, H5S_SELECT_SET, offset_out, NULL,
+				 count_out, NULL);
+
+    /*
+     * Read data from hyperslab in the file into the hyperslab in
+     * memory and display.
+     */
+    status = H5Dread(dataset, H5T_NATIVE_INT, memspace, dataspace,
+		     H5P_DEFAULT, data_out);
+    for (j = 0; j < NX; j++) {
+	for (i = 0; i < NY; i++) printf("%d ", data_out[j][i][0]);
+	printf("\n");
+    }
+    /*
+     * 0 0 0 0 0 0 0
+     * 0 0 0 0 0 0 0
+     * 0 0 0 0 0 0 0
+     * 3 4 5 6 0 0 0
+     * 4 5 6 7 0 0 0
+     * 5 6 7 8 0 0 0
+     * 0 0 0 0 0 0 0
+     */
+
+    /*
+     * Close/release resources.
+     */
+    H5Tclose(datatype);
+    H5Dclose(dataset);
+    H5Sclose(dataspace);
+    H5Sclose(memspace);
+    H5Fclose(file);
+
+    return 0;
+}
diff --git a/privatemodules/nc4/share/hdf5_examples/c/h5_ref2reg.c b/privatemodules/nc4/share/hdf5_examples/c/h5_ref2reg.c
new file mode 100644
index 0000000000000000000000000000000000000000..17ec724690b760cc5810454062a80665612d7b10
--- /dev/null
+++ b/privatemodules/nc4/share/hdf5_examples/c/h5_ref2reg.c
@@ -0,0 +1,210 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+/*
+    This program shows how to create, store and dereference references
+    to the dataset regions.
+
+    It creates a file and writes a two dimensional integer dataset
+    to it. Then it creates a dataset to store region references in. It
+    stores references to a hyperslab and 3 points selected (for the
+    integer dataset previously created).
+
+    It then reopens the references dataset, reads and dereferences the
+    region references, and then reads and displays the selected hyperslab
+    and selected elements data from the integer dataset.
+*/
+
+#include "hdf5.h"
+
+#define filename "REF_REG.h5"
+#define dsetnamev "MATRIX"
+#define dsetnamer "REGION_REFERENCES"
+
+int main(void)
+{
+    hid_t file_id;        /* file identifier */
+    hid_t space_id;       /* dataspace identifiers */
+    hid_t spacer_id;
+    hid_t dsetv_id;       /*dataset identifiers*/
+    hid_t dsetr_id;
+    hsize_t dims[2] =  {2,9};
+    hsize_t dimsr[1] =  {2};
+    int rank = 2;
+    int rankr =1;
+    herr_t status;
+    hdset_reg_ref_t ref[2];
+    hdset_reg_ref_t ref_out[2];
+    int data[2][9] = {{1,1,2,3,3,4,5,5,6},{1,2,2,3,4,4,5,6,6}};
+    int data_out[2][9] = {{0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0}};
+    hsize_t start[2];
+    hsize_t count[2];
+    hsize_t coord[2][3] = {{0, 0, 1}, {6, 0, 8}};
+    unsigned num_points = 3;
+    int i, j;
+    size_t name_size1, name_size2;
+    char buf1[10], buf2[10];
+
+    /*
+     * Create file with default file access and file creation properties.
+     */
+    file_id = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /*
+     * Create dataspace for datasets.
+     */
+    space_id = H5Screate_simple(rank, dims, NULL);
+    spacer_id = H5Screate_simple(rankr, dimsr, NULL);
+
+    /*
+     * Create integer dataset.
+     */
+    dsetv_id = H5Dcreate2(file_id, dsetnamev, H5T_NATIVE_INT, space_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+
+    /*
+     * Write data to the dataset.
+     */
+    status = H5Dwrite(dsetv_id, H5T_NATIVE_INT, H5S_ALL , H5S_ALL, H5P_DEFAULT,data);
+    status = H5Dclose(dsetv_id);
+
+    /*
+     * Dataset with references.
+     */
+    dsetr_id = H5Dcreate2(file_id, dsetnamer, H5T_STD_REF_DSETREG, spacer_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+
+    /*
+     * Create a reference to the hyperslab.
+     */
+    start[0] = 0;
+    start[1] = 3;
+    count[0] = 2;
+    count[1] = 3;
+    status = H5Sselect_hyperslab(space_id, H5S_SELECT_SET, start, NULL, count, NULL);
+    status = H5Rcreate(&ref[0], file_id, dsetnamev, H5R_DATASET_REGION, space_id);
+
+    /*
+     * Create a reference to elements selection.
+     */
+    status = H5Sselect_none(space_id);
+    status = H5Sselect_elements(space_id, H5S_SELECT_SET, num_points, (const hsize_t *)coord);
+    status = H5Rcreate(&ref[1], file_id, dsetnamev, H5R_DATASET_REGION, space_id);
+
+    /*
+     * Write dataset with the references.
+     */
+    status = H5Dwrite(dsetr_id, H5T_STD_REF_DSETREG, H5S_ALL, H5S_ALL, H5P_DEFAULT,ref);
+
+    /*
+     * Close all objects.
+     */
+    status = H5Sclose(space_id);
+    status = H5Sclose(spacer_id);
+    status = H5Dclose(dsetr_id);
+    status = H5Fclose(file_id);
+
+    /*
+     * Reopen the file to read selections back.
+     */
+    file_id = H5Fopen(filename, H5F_ACC_RDWR,  H5P_DEFAULT);
+
+    /*
+     * Reopen the dataset with object references and read references
+     * to the buffer.
+     */
+    dsetr_id = H5Dopen2(file_id, dsetnamer, H5P_DEFAULT);
+
+    status = H5Dread(dsetr_id, H5T_STD_REF_DSETREG, H5S_ALL, H5S_ALL,
+                   H5P_DEFAULT, ref_out);
+
+    /*
+     * Dereference the first reference.
+     */
+    dsetv_id = H5Rdereference(dsetr_id, H5R_DATASET_REGION, &ref_out[0]);
+    /*
+     * Get name of the dataset the first region reference points to
+     * using H5Rget_name
+     */
+    name_size1 = H5Rget_name(dsetr_id, H5R_DATASET_REGION, &ref_out[0], (char*)buf1, 10);
+    printf(" Dataset's name (returned by H5Rget_name) the reference points to is %s, name length is %d\n", buf1, (int)name_size1);
+    /*
+     * Get name of the dataset the first region reference points to
+     * using H5Iget_name
+     */
+    name_size2 = H5Iget_name(dsetv_id, (char*)buf2, 10);
+    printf(" Dataset's name (returned by H5Iget_name) the reference points to is %s, name length is %d\n", buf2, (int)name_size2);
+
+    space_id = H5Rget_region(dsetr_id, H5R_DATASET_REGION,&ref_out[0]);
+
+    /*
+     * Read and display hyperslab selection from the dataset.
+     */
+
+    status = H5Dread(dsetv_id, H5T_NATIVE_INT, H5S_ALL, space_id,
+                   H5P_DEFAULT, data_out);
+    printf("Selected hyperslab: ");
+    for (i = 0; i <= 1; i++)
+    {
+        printf("\n");
+        for (j = 0; j <= 8; j++)
+            printf("%d ", data_out[i][j]);
+    }
+    printf("\n");
+
+    /*
+     * Close dataspace and the dataset.
+     */
+    status = H5Sclose(space_id);
+    status = H5Dclose(dsetv_id);
+
+    /*
+     * Initialize data_out array again to get point selection.
+     */
+    for (i = 0; i <= 1; i++)
+        for (j = 0; j <= 8; j++)
+            data_out[i][j] = 0;
+
+    /*
+     * Dereference the second reference.
+     */
+    dsetv_id = H5Rdereference(dsetr_id, H5R_DATASET_REGION, &ref_out[1]);
+    space_id = H5Rget_region(dsetv_id, H5R_DATASET_REGION,&ref_out[1]);
+
+    /*
+     * Read selected data from the dataset.
+     */
+
+    status = H5Dread(dsetv_id, H5T_NATIVE_INT, H5S_ALL, space_id,
+                   H5P_DEFAULT, data_out);
+    printf("Selected points: ");
+    for (i = 0; i <= 1; i++)
+    {
+        printf("\n");
+        for (j = 0; j <= 8; j++)
+            printf("%d ", data_out[i][j]);
+    }
+    printf("\n");
+
+    /*
+     * Close dataspace and the dataset.
+     */
+    status = H5Sclose(space_id);
+    status = H5Dclose(dsetv_id);
+    status = H5Dclose(dsetr_id);
+    status = H5Fclose(file_id);
+
+    return 0;
+}
+
+
+
diff --git a/privatemodules/nc4/share/hdf5_examples/c/h5_reference.c b/privatemodules/nc4/share/hdf5_examples/c/h5_reference.c
new file mode 100644
index 0000000000000000000000000000000000000000..31aa2cf409f4ab43fa0688b4e7c09bf5de8df16d
--- /dev/null
+++ b/privatemodules/nc4/share/hdf5_examples/c/h5_reference.c
@@ -0,0 +1,149 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+ /*
+  *       This program illustrates how references to objects can be used.
+  *       Program creates a dataset and a group in a file. It also creates
+  *       second dataset, and references to the first dataset and the group
+  *       are stored in it.
+  *       Program reopens the file and reads dataset with the references.
+  *       References are used to open the objects. Information about the
+  *       objects is displayed.
+  */
+
+#include <stdlib.h>
+
+#include "hdf5.h"
+
+#define H5FILE_NAME "refere.h5"
+
+int
+main(void) {
+   hid_t fid;                         /* File, group, datasets, datatypes */
+   hid_t gid_a;                       /* and  dataspaces identifiers   */
+   hid_t did_b, sid_b, tid_b;
+   hid_t did_r, tid_r, sid_r;
+   H5O_type_t obj_type;
+   herr_t status;
+
+   hobj_ref_t *wbuf; /* buffer to write to disk */
+   hobj_ref_t *rbuf; /* buffer to read from disk */
+
+
+   hsize_t dim_r[1];
+   hsize_t dim_b[2];
+
+   /*
+    *  Create a file using default properties.
+    */
+   fid = H5Fcreate(H5FILE_NAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+   /*
+    *  Create  group "A" in the file.
+    */
+   gid_a = H5Gcreate2(fid, "A", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+
+  /*
+   *  Create dataset "B" in the file.
+   */
+   dim_b[0] = 2;
+   dim_b[1] = 6;
+   sid_b = H5Screate_simple(2, dim_b, NULL);
+   did_b = H5Dcreate2(fid, "B", H5T_NATIVE_FLOAT, sid_b, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+
+   /*
+    *  Create dataset "R" to store references to the objects "A" and "B".
+    */
+   dim_r[0] = 2;
+   sid_r = H5Screate_simple(1, dim_r, NULL);
+   tid_r = H5Tcopy(H5T_STD_REF_OBJ);
+   did_r = H5Dcreate2(fid, "R", tid_r, sid_r, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+
+   /*
+    *  Allocate write and read buffers.
+    */
+   wbuf = (hobj_ref_t *)malloc(sizeof(hobj_ref_t) * 2);
+   rbuf = (hobj_ref_t *)malloc(sizeof(hobj_ref_t) * 2);
+
+   /*
+    *  Create references to the group "A" and dataset "B"
+    *  and store them in the wbuf.
+    */
+   H5Rcreate(&wbuf[0], fid, "A", H5R_OBJECT, -1);
+   H5Rcreate(&wbuf[1], fid, "B", H5R_OBJECT, -1);
+
+   /*
+    *  Write dataset R using default transfer properties.
+    */
+   status = H5Dwrite(did_r, H5T_STD_REF_OBJ, H5S_ALL, H5S_ALL, H5P_DEFAULT, wbuf);
+
+   /*
+    *  Close all objects.
+    */
+   H5Gclose(gid_a);
+
+   H5Sclose(sid_b);
+   H5Dclose(did_b);
+
+   H5Tclose(tid_r);
+   H5Sclose(sid_r);
+   H5Dclose(did_r);
+
+   H5Fclose(fid);
+
+   /*
+    * Reopen the file.
+    */
+   fid = H5Fopen(H5FILE_NAME, H5F_ACC_RDWR, H5P_DEFAULT);
+
+   /*
+    *  Open and read dataset "R".
+    */
+   did_r  = H5Dopen2(fid, "R", H5P_DEFAULT);
+   status = H5Dread(did_r, H5T_STD_REF_OBJ, H5S_ALL, H5S_ALL, H5P_DEFAULT, rbuf);
+
+   /*
+    * Find the type of referenced objects.
+    */
+    status = H5Rget_obj_type2(did_r, H5R_OBJECT, &rbuf[0], &obj_type);
+    if(obj_type == H5O_TYPE_GROUP)
+        printf("First dereferenced object is a group. \n");
+
+    status = H5Rget_obj_type2(did_r, H5R_OBJECT, &rbuf[1], &obj_type);
+    if(obj_type == H5O_TYPE_DATASET)
+        printf("Second dereferenced object is a dataset. \n");
+
+   /*
+    *  Get datatype of the dataset "B"
+    */
+   did_b = H5Rdereference(did_r, H5R_OBJECT, &rbuf[1]);
+   tid_b = H5Dget_type(did_b);
+   if(H5Tequal(tid_b, H5T_NATIVE_FLOAT))
+     printf("Datatype of the dataset is H5T_NATIVE_FLOAT.\n");
+   printf("\n");
+
+   /*
+    * Close all objects and free memory buffers.
+    */
+   H5Dclose(did_r);
+   H5Dclose(did_b);
+   H5Tclose(tid_b);
+   H5Fclose(fid);
+   free(rbuf);
+   free(wbuf);
+
+   return 0;
+ }
+
diff --git a/privatemodules/nc4/share/hdf5_examples/c/h5_select.c b/privatemodules/nc4/share/hdf5_examples/c/h5_select.c
new file mode 100644
index 0000000000000000000000000000000000000000..ceb9c2c663890ebe88d835449fce63dde9c68777
--- /dev/null
+++ b/privatemodules/nc4/share/hdf5_examples/c/h5_select.c
@@ -0,0 +1,334 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ *  This program shows how the H5Sselect_hyperslab and H5Sselect_elements
+ *  functions are used to write selected data from memory to the file.
+ *  Program takes 48 elements from the linear buffer and writes them into
+ *  the matrix using 3x2 blocks, (4,3) stride and (2,4) count.
+ *  Then four elements  of the matrix are overwritten with the new values and
+ *  file is closed. Program reopens the file and selects the union of two
+ *  hyperslabs in the dataset in the file. Then it reads the selection into the
+ *  memory dataset preserving the shape of the selection.
+ */
+
+#include "hdf5.h"
+
+#define H5FILE_NAME "Select.h5"
+
+#define MSPACE1_RANK     1          /* Rank of the first dataset in memory */
+#define MSPACE1_DIM      50         /* Dataset size in memory */
+
+#define MSPACE2_RANK     1          /* Rank of the second dataset in memory */
+#define MSPACE2_DIM      4          /* Dataset size in memory */
+
+#define FSPACE_RANK      2          /* Dataset rank as it is stored in the file */
+#define FSPACE_DIM1      8          /* Dimension sizes of the dataset as it is
+                                       stored in the file */
+#define FSPACE_DIM2      12
+
+                                    /* We will read dataset back from the file
+                                       to the dataset in memory with these
+                                       dataspace parameters. */
+#define MSPACE_RANK      2
+#define MSPACE_DIM1      8
+#define MSPACE_DIM2      9
+
+#define NPOINTS          4          /* Number of points that will be selected
+                                       and overwritten */
+int
+main (void)
+{
+
+   hid_t   file, dataset;           /* File and dataset identifiers */
+   hid_t   mid1, mid2, mid, fid;    /* Dataspace identifiers */
+   hid_t   plist;                   /* Dataset property list identifier */
+
+   hsize_t dim1[] = {MSPACE1_DIM};  /* Dimension size of the first dataset
+                                       (in memory) */
+   hsize_t dim2[] = {MSPACE2_DIM};  /* Dimension size of the second dataset
+                                       (in memory */
+   hsize_t fdim[] = {FSPACE_DIM1, FSPACE_DIM2};
+                                    /* Dimension sizes of the dataset (on disk) */
+   hsize_t mdim[] = {MSPACE_DIM1, MSPACE_DIM2}; /* Dimension sizes of the
+                                                   dataset in memory when we
+                                                   read selection from the
+                                                   dataset on the disk */
+
+   hsize_t start[2];  /* Start of hyperslab */
+   hsize_t stride[2]; /* Stride of hyperslab */
+   hsize_t count[2];  /* Block count */
+   hsize_t block[2];  /* Block sizes */
+
+   hsize_t coord[NPOINTS][FSPACE_RANK]; /* Array to store selected points
+                                            from the file dataspace */
+   herr_t ret;
+   unsigned i,j;
+   int fillvalue = 0;   /* Fill value for the dataset */
+
+   int    matrix_out[MSPACE_DIM1][MSPACE_DIM2]; /* Buffer to read from the
+                                                   dataset */
+   int    vector[MSPACE1_DIM];
+   int    values[] = {53, 59, 61, 67};  /* New values to be written */
+
+   /*
+    * Buffers' initialization.
+    */
+   vector[0] = vector[MSPACE1_DIM - 1] = -1;
+   for(i = 1; i < MSPACE1_DIM - 1; i++)
+       vector[i] = i;
+
+   /*
+    * Create a file.
+    */
+   file = H5Fcreate(H5FILE_NAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+   /*
+    * Create property list for a dataset and set up fill values.
+    */
+   plist = H5Pcreate(H5P_DATASET_CREATE);
+   ret   = H5Pset_fill_value(plist, H5T_NATIVE_INT, &fillvalue);
+
+    /*
+     * Create dataspace for the dataset in the file.
+     */
+    fid = H5Screate_simple(FSPACE_RANK, fdim, NULL);
+
+    /*
+     * Create dataset in the file. Notice that creation
+     * property list plist is used.
+     */
+    dataset = H5Dcreate2(file, "Matrix in file", H5T_NATIVE_INT, fid, H5P_DEFAULT, plist, H5P_DEFAULT);
+
+    /*
+     * Select hyperslab for the dataset in the file, using 3x2 blocks,
+     * (4,3) stride and (2,4) count starting at the position (0,1).
+     */
+    start[0]  = 0; start[1]  = 1;
+    stride[0] = 4; stride[1] = 3;
+    count[0]  = 2; count[1]  = 4;
+    block[0]  = 3; block[1]  = 2;
+    ret = H5Sselect_hyperslab(fid, H5S_SELECT_SET, start, stride, count, block);
+
+    /*
+     * Create dataspace for the first dataset.
+     */
+    mid1 = H5Screate_simple(MSPACE1_RANK, dim1, NULL);
+
+    /*
+     * Select hyperslab.
+     * We will use 48 elements of the vector buffer starting at the second element.
+     * Selected elements are 1 2 3 . . . 48
+     */
+    start[0]  = 1;
+    stride[0] = 1;
+    count[0]  = 48;
+    block[0]  = 1;
+    ret = H5Sselect_hyperslab(mid1, H5S_SELECT_SET, start, stride, count, block);
+
+    /*
+     * Write selection from the vector buffer to the dataset in the file.
+     *
+     * File dataset should look like this:
+     *                    0  1  2  0  3  4  0  5  6  0  7  8
+     *                    0  9 10  0 11 12  0 13 14  0 15 16
+     *                    0 17 18  0 19 20  0 21 22  0 23 24
+     *                    0  0  0  0  0  0  0  0  0  0  0  0
+     *                    0 25 26  0 27 28  0 29 30  0 31 32
+     *                    0 33 34  0 35 36  0 37 38  0 39 40
+     *                    0 41 42  0 43 44  0 45 46  0 47 48
+     *                    0  0  0  0  0  0  0  0  0  0  0  0
+     */
+     ret = H5Dwrite(dataset, H5T_NATIVE_INT, mid1, fid, H5P_DEFAULT, vector);
+
+    /*
+     * Reset the selection for the file dataspace fid.
+     */
+    ret = H5Sselect_none(fid);
+
+    /*
+     * Create dataspace for the second dataset.
+     */
+    mid2 = H5Screate_simple(MSPACE2_RANK, dim2, NULL);
+
+    /*
+     * Select sequence of NPOINTS points in the file dataspace.
+     */
+    coord[0][0] = 0; coord[0][1] = 0;
+    coord[1][0] = 3; coord[1][1] = 3;
+    coord[2][0] = 3; coord[2][1] = 5;
+    coord[3][0] = 5; coord[3][1] = 6;
+
+    ret = H5Sselect_elements(fid, H5S_SELECT_SET, NPOINTS, (const hsize_t *)coord);
+
+    /*
+     * Write new selection of points to the dataset.
+     */
+    ret = H5Dwrite(dataset, H5T_NATIVE_INT, mid2, fid, H5P_DEFAULT, values);
+
+    /*
+     * File dataset should look like this:
+     *                   53  1  2  0  3  4  0  5  6  0  7  8
+     *                    0  9 10  0 11 12  0 13 14  0 15 16
+     *                    0 17 18  0 19 20  0 21 22  0 23 24
+     *                    0  0  0 59  0 61  0  0  0  0  0  0
+     *                    0 25 26  0 27 28  0 29 30  0 31 32
+     *                    0 33 34  0 35 36 67 37 38  0 39 40
+     *                    0 41 42  0 43 44  0 45 46  0 47 48
+     *                    0  0  0  0  0  0  0  0  0  0  0  0
+     *
+     */
+
+    /*
+     * Close memory file and memory dataspaces.
+     */
+    ret = H5Sclose(mid1);
+    ret = H5Sclose(mid2);
+    ret = H5Sclose(fid);
+
+    /*
+     * Close dataset.
+     */
+    ret = H5Dclose(dataset);
+
+    /*
+     * Close the file.
+     */
+    ret = H5Fclose(file);
+
+    /*
+     * Open the file.
+     */
+    file = H5Fopen(H5FILE_NAME, H5F_ACC_RDONLY, H5P_DEFAULT);
+
+    /*
+     * Open the dataset.
+     */
+    dataset = H5Dopen2(file, "Matrix in file", H5P_DEFAULT);
+
+    /*
+     * Get dataspace of the open dataset.
+     */
+    fid = H5Dget_space(dataset);
+
+    /*
+     * Select first hyperslab for the dataset in the file. The following
+     * elements are selected:
+     *                     10  0 11 12
+     *                     18  0 19 20
+     *                      0 59  0 61
+     *
+     */
+    start[0] = 1; start[1] = 2;
+    block[0] = 1; block[1] = 1;
+    stride[0] = 1; stride[1] = 1;
+    count[0]  = 3; count[1]  = 4;
+    ret = H5Sselect_hyperslab(fid, H5S_SELECT_SET, start, stride, count, block);
+
+    /*
+     * Add second selected hyperslab to the selection.
+     * The following elements are selected:
+     *                    19 20  0 21 22
+     *                     0 61  0  0  0
+     *                    27 28  0 29 30
+     *                    35 36 67 37 38
+     *                    43 44  0 45 46
+     *                     0  0  0  0  0
+     * Note that two hyperslabs overlap. Common elements are:
+     *                                              19 20
+     *                                               0 61
+     */
+    start[0] = 2; start[1] = 4;
+    block[0] = 1; block[1] = 1;
+    stride[0] = 1; stride[1] = 1;
+    count[0]  = 6; count[1]  = 5;
+    ret = H5Sselect_hyperslab(fid, H5S_SELECT_OR, start, stride, count, block);
+
+    /*
+     * Create memory dataspace.
+     */
+    mid = H5Screate_simple(MSPACE_RANK, mdim, NULL);
+
+    /*
+     * Select two hyperslabs in memory. Hyperslabs has the same
+     * size and shape as the selected hyperslabs for the file dataspace.
+     */
+    start[0] = 0; start[1] = 0;
+    block[0] = 1; block[1] = 1;
+    stride[0] = 1; stride[1] = 1;
+    count[0]  = 3; count[1]  = 4;
+    ret = H5Sselect_hyperslab(mid, H5S_SELECT_SET, start, stride, count, block);
+
+    start[0] = 1; start[1] = 2;
+    block[0] = 1; block[1] = 1;
+    stride[0] = 1; stride[1] = 1;
+    count[0]  = 6; count[1]  = 5;
+    ret = H5Sselect_hyperslab(mid, H5S_SELECT_OR, start, stride, count, block);
+
+    /*
+     * Initialize data buffer.
+     */
+    for (i = 0; i < MSPACE_DIM1; i++) {
+       for (j = 0; j < MSPACE_DIM2; j++)
+            matrix_out[i][j] = 0;
+    }
+    /*
+     * Read data back to the buffer matrix_out.
+     */
+    ret = H5Dread(dataset, H5T_NATIVE_INT, mid, fid,
+                  H5P_DEFAULT, matrix_out);
+
+    /*
+     * Display the result. Memory dataset is:
+     *
+     *                    10  0 11 12  0  0  0  0  0
+     *                    18  0 19 20  0 21 22  0  0
+     *                     0 59  0 61  0  0  0  0  0
+     *                     0  0 27 28  0 29 30  0  0
+     *                     0  0 35 36 67 37 38  0  0
+     *                     0  0 43 44  0 45 46  0  0
+     *                     0  0  0  0  0  0  0  0  0
+     *                     0  0  0  0  0  0  0  0  0
+     */
+    for(i = 0; i < MSPACE_DIM1; i++) {
+        for(j = 0; j < MSPACE_DIM2; j++)
+            printf("%3d  ", matrix_out[i][j]);
+        printf("\n");
+    }
+
+    /*
+     * Close memory file and memory dataspaces.
+     */
+    ret = H5Sclose(mid);
+    ret = H5Sclose(fid);
+
+    /*
+     * Close dataset.
+     */
+    ret = H5Dclose(dataset);
+
+    /*
+     * Close property list
+     */
+    ret = H5Pclose(plist);
+
+    /*
+     * Close the file.
+     */
+    ret = H5Fclose(file);
+
+    return 0;
+}
+
diff --git a/privatemodules/nc4/share/hdf5_examples/c/h5_shared_mesg.c b/privatemodules/nc4/share/hdf5_examples/c/h5_shared_mesg.c
new file mode 100644
index 0000000000000000000000000000000000000000..0c7f2f0cf4cda22af910c30044fe16bb7d10d21b
--- /dev/null
+++ b/privatemodules/nc4/share/hdf5_examples/c/h5_shared_mesg.c
@@ -0,0 +1,327 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ *  This program illustrates the usage of HDF5's implicit message sharing
+ *  feature, which can be used to save space when the same messages are
+ *  used many times in a file.
+ *
+ *  This example creates a standard file using file creation property lists
+ *  to control which messages are shared.  Messages that can be shared are
+ *  datatypes, dataspaces, attributes, fill values, and filter pipelines.
+ *
+ */
+
+#include <stdlib.h>
+
+#include "hdf5.h"
+
+#define NUM_DATASETS 40
+const char* DSETNAME[] = {
+    "dataset0",    "dataset1",
+    "dataset2",    "dataset3",
+    "dataset4",    "dataset5",
+    "dataset6",    "dataset7",
+    "dataset8",    "dataset9",
+    "dataset10",   "dataset11",
+    "dataset12",   "dataset13",
+    "dataset14",   "dataset15",
+    "dataset16",   "dataset17",
+    "dataset18",   "dataset19",
+    "dataset20",   "dataset21",
+    "dataset22",   "dataset23",
+    "dataset24",   "dataset25",
+    "dataset26",   "dataset27",
+    "dataset28",   "dataset29",
+    "dataset30",   "dataset31",
+    "dataset32",   "dataset33",
+    "dataset34",   "dataset35",
+    "dataset36",   "dataset37",
+    "dataset38",   "dataset39",
+    NULL
+};
+
+herr_t create_standard_file(const char *filename, hid_t fcpl);
+
+/*-------------------------------------------------------------------------
+ * Function:    main
+ *
+ * Purpose:     Enables shared messages using File Creation Property Lists
+ *              and creates files using these settings.
+ *
+ *-------------------------------------------------------------------------
+ */
+int main(void)
+{
+    hid_t fcpl_id;
+    herr_t ret;
+
+    /* Create a file creation property list */
+    fcpl_id = H5Pcreate(H5P_FILE_CREATE);
+    if(fcpl_id < 0) goto error;
+
+    /* The file creation property list is the default list right now.
+     * Create a file using it (this is the same as creating a file with
+     * H5P_DEFAULT).  Implicit shared messages will be disabled.
+     */
+    ret = create_standard_file("default_file.h5", fcpl_id);
+    if(ret < 0) goto error;
+
+    /* There are five kinds of messages that can be shared: datatypes,
+     * dataspaces, attributes, fill values, and filter pipelines.
+     * Shared messages are stored in up to five "indexes," where each
+     * index can contain one or more types of message.  Using more indexes
+     * will result in more overhead for sharing, but can also provide
+     * more "tunability" and may affect caching performance.
+     */
+    /* To begin with, use only one index. */
+    ret = H5Pset_shared_mesg_nindexes(fcpl_id, 1);
+    if(ret < 0) goto error;
+
+    /* Each index has a "minimum message size" for a message of that
+     * type to be shared.  Since sharing a message creates some overhead,
+     * this is to prevent this overhead for very small messages when little
+     * space would be saved by sharing them anyway.
+     * If the content of the file isn't known beforehand, it's probably best
+     * to set the minimum size "high"; over 100 or 200 bytes.  If the content
+     * of the file is known, this value can be used to trade space saved for
+     * performance lost.  The smaller this value is, the more messages will
+     * be shared, so the more overhead will be incurred.
+     * This value is in bytes.  A shared message involves about 30 bytes of
+     * overhead.  Note that even messages that are only written once will
+     * require this overhead (since they "might" be shared in the future),
+     * so setting the minimum size too low may result in a file actually growing
+     * in size.
+     * For this example case, we'll set the minimum sharing size to be small
+     * since we know that every message the "standard" file uses will be
+     * repeated many times.
+     */
+    /* The other property that each index has is the kinds of messages that
+     * it holds.  For the simple case, we'll put every message that could be
+     * shared in this single index.
+     */
+    ret = H5Pset_shared_mesg_index(fcpl_id, 0, H5O_SHMESG_ALL_FLAG, 40);
+    if(ret < 0) goto error;
+
+    /* The other property that can be set for shared messages is the
+     * list/B-tree cutoff for the indexes.
+     * Each shared message index beins life as a simple list of messages
+     * and becomes a B-tree when "too many" messages are written to it.
+     * This keeps the indexes simple when only a few messages are shared,
+     * but allows them to scale for many messages.  If many messages are
+     * deleted from the B-tree, it scales back down into a list.
+     * A "resonable" setting for maximum list size and minimum btree size
+     * depends on what kinds of messages will be stored in the file.
+     * These numbers are the same for all indexes in a file.
+     * We'll guess at some numbers, though we could just as easily have kept
+     * the default values.  The first value is the maximum list size, the
+     * second the minimum B-tree size.
+     */
+    ret = H5Pset_shared_mesg_phase_change(fcpl_id, 30, 20);
+    if(ret < 0) goto error;
+
+    /* Now create a file with this property list.  After the FCPL is used,
+     * everything is automatic; messages will be shared and this will be
+     * completely transparent to the user.  Even if the file is closed
+     * and re-opened, this settings will be saved and applied to messages
+     * written later.
+     */
+    ret = create_standard_file("one_index_file.h5", fcpl_id);
+    if(ret < 0) goto error;
+
+    /* Now try some variations on this.  The FCPL hasn't been closed, so
+     * we don't need to re-create it.
+     * For instance, if we set the index to only share very large
+     * messages, none of the messages we write will qualify and the file
+     * will be about the same size as a normal file (with just a little extra
+     * overhead).
+     */
+    ret = H5Pset_shared_mesg_index(fcpl_id, 0, H5O_SHMESG_ALL_FLAG, 1000);
+    if(ret < 0) goto error;
+
+    ret = create_standard_file("only_huge_mesgs_file.h5", fcpl_id);
+    if(ret < 0) goto error;
+
+
+    /* Or, suppose we only wanted to shared dataspaces and
+     * attributes (which might make sense if we were going to use committed
+     * datatypes).  We could change the flags on the index:
+     */
+    ret = H5Pset_shared_mesg_index(fcpl_id, 0, H5O_SHMESG_SDSPACE_FLAG | H5O_SHMESG_ATTR_FLAG, 40);
+    if(ret < 0) goto error;
+
+    ret = create_standard_file("only_dspaces_and_attrs_file.h5", fcpl_id);
+    if(ret < 0) goto error;
+
+
+    /* We could create a second index and put attributes in it to separate them
+     * from datatypes and dataspaces (and then run some performance metrics to
+     * see whether this improved caching performance).
+     */
+    ret = H5Pset_shared_mesg_nindexes(fcpl_id, 2);
+    if(ret < 0) goto error;
+    ret = H5Pset_shared_mesg_index(fcpl_id, 0, H5O_SHMESG_DTYPE_FLAG | H5O_SHMESG_SDSPACE_FLAG, 40);
+    if(ret < 0) goto error;
+    ret = H5Pset_shared_mesg_index(fcpl_id, 1, H5O_SHMESG_ATTR_FLAG, 40);
+    if(ret < 0) goto error;
+
+    ret = create_standard_file("separate_indexes_file.h5", fcpl_id);
+    if(ret < 0) goto error;
+
+    /* We can try twiddling the "phase change" values and see what it does to
+     * the file size.  Since there's only a few different messages (two
+     * datatypes, two dataspaces, and one attribute), using smaller lists will
+     * save some space.
+     */
+    ret = H5Pset_shared_mesg_nindexes(fcpl_id, 1);
+    if(ret < 0) goto error;
+    ret = H5Pset_shared_mesg_index(fcpl_id, 0, H5O_SHMESG_ALL_FLAG, 40);
+    if(ret < 0) goto error;
+
+    ret = H5Pset_shared_mesg_phase_change(fcpl_id, 5, 0);
+    if(ret < 0) goto error;
+
+    ret = create_standard_file("small_lists_file.h5", fcpl_id);
+    if(ret < 0) goto error;
+
+    /* Or we could create indexes that are never lists, but are created as
+     * B-trees.  We do this by setting the "maximum list size" to zero.
+     */
+    ret = H5Pset_shared_mesg_phase_change(fcpl_id, 0, 0);
+    if(ret < 0) goto error;
+
+    ret = create_standard_file("btrees_file.h5", fcpl_id);
+    if(ret < 0) goto error;
+
+
+    /* Obviously there are a lot more permutations of these options possible.
+     * Performance will often be a tradeoff of speed for space, but will
+     * depend a great deal on the specific application.  If performance is
+     * important, the best thing to do is to play with these settings to find
+     * the ones that work best for you.
+     * Please let The HDF Group (help@hdfgroup.org) know what you find!
+     */
+
+
+    /* Close the property list */
+    ret = H5Pclose(fcpl_id);
+    if(ret < 0) goto error;
+    return 0;
+
+error:
+    return -1;
+}
+
+/*-------------------------------------------------------------------------
+ * Function:    create_standard_file
+ *
+ * Purpose:     A helper functon for the example.  Creates an HDF5 file
+ *              with many repeated messages using the file creation
+ *              property list FCPL.
+ *
+ *              This function only uses datatypes, dataspaces, and
+ *              attributes.  Fill values and filter pipelines can also
+ *              be shared in the same way (i.e., by enabling sharing in
+ *              the FCPL and writing the same message more than once).
+ *-------------------------------------------------------------------------
+ */
+herr_t
+create_standard_file(const char *filename, hid_t fcpl_id)
+{
+    hid_t file_id=-1;
+    hid_t type_id=-1, temp_type_id=-1;
+    hsize_t dims[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
+    hid_t space_id=-1;
+    hid_t attr_type_id = -1;
+    hid_t attr_space_id = -1;
+    int attr_data[] = {1,2,3,4,5,6,7,8,9,0};
+    hid_t dset_id=-1;
+    hid_t attr_id=-1;
+    int x;
+    herr_t ret;
+
+    /* Create the file */
+    file_id = H5Fcreate(filename, H5F_ACC_TRUNC, fcpl_id, H5P_DEFAULT);
+    if(file_id < 0) goto error;
+
+    /* Create the datatype we'll be using.  Generally, sharing messages
+     * is most useful when the message is complex and takes more space on
+     * disk, so this type will be an array type rather than an atomic type.
+     * However, any type can be shared.
+     */
+    temp_type_id = H5Tarray_create2(H5T_NATIVE_INT, 2, dims);
+    if(temp_type_id < 0) goto error;
+    type_id  = H5Tarray_create2(temp_type_id, 2, dims);
+    if(type_id < 0) goto error;
+    ret = H5Tclose(temp_type_id);
+    if(ret < 0) goto error;
+
+    /* Create the dataspace we'll be using.
+     * Again, create a more complex dataspace so that more space will
+     * be saved when we share it.
+     */
+    space_id = H5Screate_simple(10, dims, dims);
+    if(space_id < 0) goto error;
+
+    /* Create a datatype and dataspace for the attributes we'll be creating.
+     * The datatype will be a single integer, and each attribute will hold
+     * 10 integers.
+     */
+    attr_type_id = H5Tcopy(H5T_NATIVE_INT);
+    if(attr_type_id < 0) goto error;
+    attr_space_id = H5Screate_simple(1, dims, dims);
+    if(attr_space_id < 0) goto error;
+
+
+    /* Begin using the messages many times.  Do this by creating datasets
+     * that use this datatype, dataspace, and have this attribute.
+     */
+    for(x = 0; x < NUM_DATASETS; ++x) {
+       /* Create a dataset */
+       dset_id = H5Dcreate2(file_id, DSETNAME[x], type_id, space_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+       if(dset_id < 0) goto error;
+
+       /* Create an attribute on the dataset */
+       attr_id = H5Acreate2(dset_id, "attr_name", attr_type_id, attr_space_id, H5P_DEFAULT, H5P_DEFAULT);
+       if(attr_id < 0) goto error;
+
+       /* Write data to the attribute */
+       ret = H5Awrite(attr_id, H5T_NATIVE_INT, attr_data);
+       if(ret < 0) goto error;
+
+       ret = H5Aclose(attr_id);
+       if(ret < 0) goto error;
+       ret = H5Dclose(dset_id);
+       if(ret < 0) goto error;
+    }
+
+    /* Close all open IDs */
+    ret = H5Tclose(attr_type_id);
+    if(ret < 0) goto error;
+    ret = H5Sclose(attr_space_id);
+    if(ret < 0) goto error;
+    ret = H5Tclose(type_id);
+    if(ret < 0) goto error;
+    ret = H5Sclose(space_id);
+    if(ret < 0) goto error;
+    ret = H5Fclose(file_id);
+    if(ret < 0) goto error;
+
+    return 0;
+
+error:
+    return -1;
+}
+
diff --git a/privatemodules/nc4/share/hdf5_examples/c/h5_subset.c b/privatemodules/nc4/share/hdf5_examples/c/h5_subset.c
new file mode 100644
index 0000000000000000000000000000000000000000..66872ea9fad1041007022a2f10de396f02336da0
--- /dev/null
+++ b/privatemodules/nc4/share/hdf5_examples/c/h5_subset.c
@@ -0,0 +1,153 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/* 
+ *  This example illustrates how to read/write a subset of data (a slab) 
+ *  from/to a dataset in an HDF5 file.  It is used in the HDF5 Tutorial.
+ */
+ 
+#include "hdf5.h"
+
+#define FILE        "subset.h5"
+#define DATASETNAME "IntArray" 
+#define RANK  2
+
+#define DIM0_SUB  3                         /* subset dimensions */ 
+#define DIM1_SUB  4 
+
+
+#define DIM0     8                          /* size of dataset */       
+#define DIM1     10 
+
+int
+main (void)
+{
+    hsize_t     dims[2], dimsm[2];   
+    int         data[DIM0][DIM1];           /* data to write */
+    int         sdata[DIM0_SUB][DIM1_SUB];  /* subset to write */
+    int         rdata[DIM0][DIM1];          /* buffer for read */
+ 
+    hid_t       file_id, dataset_id;        /* handles */
+    hid_t       dataspace_id, memspace_id; 
+
+    herr_t      status;                             
+   
+    hsize_t     count[2];              /* size of subset in the file */
+    hsize_t     offset[2];             /* subset offset in the file */
+    hsize_t     stride[2];
+    hsize_t     block[2];
+    int         i, j;
+
+    
+    /*****************************************************************
+     * Create a new file with default creation and access properties.*
+     * Then create a dataset and write data to it and close the file *
+     * and dataset.                                                  *
+     *****************************************************************/
+
+    file_id = H5Fcreate (FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    dims[0] = DIM0;
+    dims[1] = DIM1;
+    dataspace_id = H5Screate_simple (RANK, dims, NULL); 
+
+    dataset_id = H5Dcreate2 (file_id, DATASETNAME, H5T_STD_I32BE, dataspace_id,
+                            H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+
+
+    for (j = 0; j < DIM0; j++) {
+	for (i = 0; i < DIM1; i++)
+            if (i< (DIM1/2))
+	       data[j][i] = 1;
+            else
+               data[j][i] = 2;
+    }     
+
+    status = H5Dwrite (dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL,
+                      H5P_DEFAULT, data);
+
+    printf ("\nData Written to File:\n");
+    for (i = 0; i<DIM0; i++){
+       for (j = 0; j<DIM1; j++)
+           printf (" %i", data[i][j]);
+       printf ("\n");
+    }
+    status = H5Sclose (dataspace_id);
+    status = H5Dclose (dataset_id);
+    status = H5Fclose (file_id);
+
+
+    /*****************************************************
+     * Reopen the file and dataset and write a subset of *
+     * values to the dataset. 
+     *****************************************************/
+
+    file_id = H5Fopen (FILE, H5F_ACC_RDWR, H5P_DEFAULT);
+    dataset_id = H5Dopen2 (file_id, DATASETNAME, H5P_DEFAULT);
+
+    /* Specify size and shape of subset to write. */
+
+    offset[0] = 1;
+    offset[1] = 2;
+
+    count[0]  = DIM0_SUB;  
+    count[1]  = DIM1_SUB;
+
+    stride[0] = 1;
+    stride[1] = 1;
+
+    block[0] = 1;
+    block[1] = 1;
+
+    /* Create memory space with size of subset. Get file dataspace 
+       and select subset from file dataspace. */
+
+    dimsm[0] = DIM0_SUB;
+    dimsm[1] = DIM1_SUB;
+    memspace_id = H5Screate_simple (RANK, dimsm, NULL); 
+
+    dataspace_id = H5Dget_space (dataset_id);
+    status = H5Sselect_hyperslab (dataspace_id, H5S_SELECT_SET, offset,
+                                  stride, count, block);
+
+    /* Write a subset of data to the dataset, then read the 
+       entire dataset back from the file.  */
+
+    printf ("\nWrite subset to file specifying:\n");
+    printf ("    offset=1x2 stride=1x1 count=3x4 block=1x1\n");
+    for (j = 0; j < DIM0_SUB; j++) {
+	for (i = 0; i < DIM1_SUB; i++)
+	   sdata[j][i] = 5;
+    }     
+
+    status = H5Dwrite (dataset_id, H5T_NATIVE_INT, memspace_id,
+                       dataspace_id, H5P_DEFAULT, sdata);
+    
+    status = H5Dread (dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL,
+                       H5P_DEFAULT, rdata);
+
+    printf ("\nData in File after Subset is Written:\n");
+    for (i = 0; i<DIM0; i++){
+       for (j = 0; j<DIM1; j++)
+           printf (" %i", rdata[i][j]);
+       printf ("\n");
+    }
+
+    status = H5Sclose (memspace_id);
+    status = H5Sclose (dataspace_id);
+    status = H5Dclose (dataset_id);
+    status = H5Fclose (file_id);
+ 
+}
diff --git a/privatemodules/nc4/share/hdf5_examples/c/h5_write.c b/privatemodules/nc4/share/hdf5_examples/c/h5_write.c
new file mode 100644
index 0000000000000000000000000000000000000000..93d40ea728efb180a7a5e73b184204a3e9efa93f
--- /dev/null
+++ b/privatemodules/nc4/share/hdf5_examples/c/h5_write.c
@@ -0,0 +1,97 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ *  This example writes data to the HDF5 file.
+ *  Data conversion is performed during write operation.
+ */
+
+#include "hdf5.h"
+
+#define H5FILE_NAME        "SDS.h5"
+#define DATASETNAME "IntArray"
+#define NX     5                      /* dataset dimensions */
+#define NY     6
+#define RANK   2
+
+int
+main (void)
+{
+    hid_t       file, dataset;         /* file and dataset handles */
+    hid_t       datatype, dataspace;   /* handles */
+    hsize_t     dimsf[2];              /* dataset dimensions */
+    herr_t      status;
+    int         data[NX][NY];          /* data to write */
+    int         i, j;
+
+    /*
+     * Data  and output buffer initialization.
+     */
+    for(j = 0; j < NX; j++)
+	for(i = 0; i < NY; i++)
+	    data[j][i] = i + j;
+    /*
+     * 0 1 2 3 4 5
+     * 1 2 3 4 5 6
+     * 2 3 4 5 6 7
+     * 3 4 5 6 7 8
+     * 4 5 6 7 8 9
+     */
+
+    /*
+     * Create a new file using H5F_ACC_TRUNC access,
+     * default file creation properties, and default file
+     * access properties.
+     */
+    file = H5Fcreate(H5FILE_NAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /*
+     * Describe the size of the array and create the data space for fixed
+     * size dataset.
+     */
+    dimsf[0] = NX;
+    dimsf[1] = NY;
+    dataspace = H5Screate_simple(RANK, dimsf, NULL);
+
+    /*
+     * Define datatype for the data in the file.
+     * We will store little endian INT numbers.
+     */
+    datatype = H5Tcopy(H5T_NATIVE_INT);
+    status = H5Tset_order(datatype, H5T_ORDER_LE);
+
+    /*
+     * Create a new dataset within the file using defined dataspace and
+     * datatype and default dataset creation properties.
+     */
+    dataset = H5Dcreate2(file, DATASETNAME, datatype, dataspace,
+			H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+
+    /*
+     * Write the data to the dataset using default transfer properties.
+     */
+    status = H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, data);
+
+    /*
+     * Close/release resources.
+     */
+    H5Sclose(dataspace);
+    H5Tclose(datatype);
+    H5Dclose(dataset);
+    H5Fclose(file);
+
+    return 0;
+}
+
diff --git a/privatemodules/nc4/share/hdf5_examples/c/ph5example.c b/privatemodules/nc4/share/hdf5_examples/c/ph5example.c
new file mode 100644
index 0000000000000000000000000000000000000000..7a41db205ab2881b20d026b389002e1f01cc83db
--- /dev/null
+++ b/privatemodules/nc4/share/hdf5_examples/c/ph5example.c
@@ -0,0 +1,1132 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Example of using the parallel HDF5 library to access datasets.
+ * Last revised: April 24, 2001.
+ *
+ * This program contains two parts.  In the first part, the mpi processes
+ * collectively create a new parallel HDF5 file and create two fixed
+ * dimension datasets in it.  Then each process writes a hyperslab into
+ * each dataset in an independent mode.  All processes collectively
+ * close the datasets and the file.
+ * In the second part, the processes collectively open the created file
+ * and the two datasets in it.  Then each process reads a hyperslab from
+ * each dataset in an independent mode and prints them out.
+ * All processes collectively close the datasets and the file.
+ *
+ * The need of requirement of parallel file prefix is that in general
+ * the current working directory in which compiling is done, is not suitable
+ * for parallel I/O and there is no standard pathname for parallel file
+ * systems.  In some cases, the parallel file name may even needs some
+ * parallel file type prefix such as: "pfs:/GF/...".  Therefore, this
+ * example requires an explicite parallel file prefix.  See the usage
+ * for more detail.
+ */
+
+#include <assert.h>
+#include "hdf5.h"
+#include <string.h>
+#include <stdlib.h>
+
+#ifdef H5_HAVE_PARALLEL
+/* Temporary source code */
+#define FAIL -1
+/* temporary code end */
+
+/* Define some handy debugging shorthands, routines, ... */
+/* debugging tools */
+#define MESG(x)\
+	if (verbose) printf("%s\n", x);\
+
+#define MPI_BANNER(mesg)\
+    {printf("--------------------------------\n");\
+    printf("Proc %d: ", mpi_rank); \
+    printf("*** %s\n", mesg);\
+    printf("--------------------------------\n");}
+
+#define SYNC(comm)\
+    {MPI_BANNER("doing a SYNC"); MPI_Barrier(comm); MPI_BANNER("SYNC DONE");}
+/* End of Define some handy debugging shorthands, routines, ... */
+
+/* Constants definitions */
+/* 24 is a multiple of 2, 3, 4, 6, 8, 12.  Neat for parallel tests. */
+#define SPACE1_DIM1	24
+#define SPACE1_DIM2	24
+#define SPACE1_RANK	2
+#define DATASETNAME1	"Data1"
+#define DATASETNAME2	"Data2"
+#define DATASETNAME3	"Data3"
+/* hyperslab layout styles */
+#define BYROW		1	/* divide into slabs of rows */
+#define BYCOL		2	/* divide into blocks of columns */
+
+#define PARAPREFIX	"HDF5_PARAPREFIX"	/* file prefix environment variable name */
+
+
+/* dataset data type.  Int's can be easily octo dumped. */
+typedef int DATATYPE;
+
+/* global variables */
+int nerrors = 0;				/* errors count */
+#ifndef PATH_MAX
+#define PATH_MAX    512
+#endif  /* !PATH_MAX */
+char    testfiles[2][PATH_MAX];
+
+
+int mpi_size, mpi_rank;				/* mpi variables */
+
+/* option flags */
+int verbose = 0;			/* verbose, default as no. */
+int doread=1;				/* read test */
+int dowrite=1;				/* write test */
+int docleanup=1;			/* cleanup */
+
+/* Prototypes */
+void slab_set(hsize_t start[], hsize_t count[], hsize_t stride[], int mode);
+void dataset_fill(hsize_t start[], hsize_t count[], hsize_t stride[], DATATYPE * dataset);
+void dataset_print(hsize_t start[], hsize_t count[], hsize_t stride[], DATATYPE * dataset);
+int dataset_vrfy(hsize_t start[], hsize_t count[], hsize_t stride[], DATATYPE *dataset, DATATYPE *original);
+void phdf5writeInd(char *filename);
+void phdf5readInd(char *filename);
+void phdf5writeAll(char *filename);
+void phdf5readAll(char *filename);
+void test_split_comm_access(char filenames[][PATH_MAX]);
+int parse_options(int argc, char **argv);
+void usage(void);
+int mkfilenames(char *prefix);
+void cleanup(void);
+
+
+/*
+ * Setup the dimensions of the hyperslab.
+ * Two modes--by rows or by columns.
+ * Assume dimension rank is 2.
+ */
+void
+slab_set(hsize_t start[], hsize_t count[], hsize_t stride[], int mode)
+{
+    switch (mode){
+    case BYROW:
+	/* Each process takes a slabs of rows. */
+	stride[0] = 1;
+	stride[1] = 1;
+	count[0] = SPACE1_DIM1/mpi_size;
+	count[1] = SPACE1_DIM2;
+	start[0] = mpi_rank*count[0];
+	start[1] = 0;
+	break;
+    case BYCOL:
+	/* Each process takes a block of columns. */
+	stride[0] = 1;
+	stride[1] = 1;
+	count[0] = SPACE1_DIM1;
+	count[1] = SPACE1_DIM2/mpi_size;
+	start[0] = 0;
+	start[1] = mpi_rank*count[1];
+	break;
+    default:
+	/* Unknown mode.  Set it to cover the whole dataset. */
+	printf("unknown slab_set mode (%d)\n", mode);
+	stride[0] = 1;
+	stride[1] = 1;
+	count[0] = SPACE1_DIM1;
+	count[1] = SPACE1_DIM2;
+	start[0] = 0;
+	start[1] = 0;
+	break;
+    }
+}
+
+
+/*
+ * Fill the dataset with trivial data for testing.
+ * Assume dimension rank is 2 and data is stored contiguous.
+ */
+void
+dataset_fill(hsize_t start[], hsize_t count[], hsize_t stride[], DATATYPE * dataset)
+{
+    DATATYPE *dataptr = dataset;
+    hsize_t i, j;
+
+    /* put some trivial data in the data_array */
+    for (i=0; i < count[0]; i++){
+	for (j=0; j < count[1]; j++){
+	    *dataptr++ = (i*stride[0]+start[0])*100 + (j*stride[1]+start[1]+1);
+	}
+    }
+}
+
+
+/*
+ * Print the content of the dataset.
+ */
+void dataset_print(hsize_t start[], hsize_t count[], hsize_t stride[], DATATYPE * dataset)
+{
+    DATATYPE *dataptr = dataset;
+    hsize_t i, j;
+
+    /* print the slab read */
+    for (i=0; i < count[0]; i++){
+	printf("Row %lu: ", (unsigned long)(i*stride[0]+start[0]));
+	for (j=0; j < count[1]; j++){
+	    printf("%03d ", *dataptr++);
+	}
+	printf("\n");
+    }
+}
+
+
+/*
+ * Print the content of the dataset.
+ */
+int dataset_vrfy(hsize_t start[], hsize_t count[], hsize_t stride[], DATATYPE *dataset, DATATYPE *original)
+{
+#define MAX_ERR_REPORT	10		/* Maximum number of errors reported */
+
+    hsize_t i, j;
+    int nerr;
+
+    /* print it if verbose */
+    if (verbose)
+	dataset_print(start, count, stride, dataset);
+
+    nerr = 0;
+    for (i=0; i < count[0]; i++){
+	for (j=0; j < count[1]; j++){
+	    if (*dataset++ != *original++){
+		nerr++;
+		if (nerr <= MAX_ERR_REPORT){
+		    printf("Dataset Verify failed at [%lu][%lu](row %lu, col %lu): expect %d, got %d\n",
+			(unsigned long)i, (unsigned long)j,
+			(unsigned long)(i*stride[0]+start[0]), (unsigned long)(j*stride[1]+start[1]),
+			*(dataset-1), *(original-1));
+		}
+	    }
+	}
+    }
+    if (nerr > MAX_ERR_REPORT)
+	printf("[more errors ...]\n");
+    if (nerr)
+	printf("%d errors found in dataset_vrfy\n", nerr);
+    return(nerr);
+}
+
+
+/*
+ * Example of using the parallel HDF5 library to create two datasets
+ * in one HDF5 files with parallel MPIO access support.
+ * The Datasets are of sizes (number-of-mpi-processes x DIM1) x DIM2.
+ * Each process controls only a slab of size DIM1 x DIM2 within each
+ * dataset.
+ */
+
+void
+phdf5writeInd(char *filename)
+{
+    hid_t fid1;			/* HDF5 file IDs */
+    hid_t acc_tpl1;		/* File access templates */
+    hid_t sid1;   		/* Dataspace ID */
+    hid_t file_dataspace;	/* File dataspace ID */
+    hid_t mem_dataspace;	/* memory dataspace ID */
+    hid_t dataset1, dataset2;	/* Dataset ID */
+    hsize_t dims1[SPACE1_RANK] =
+	{SPACE1_DIM1,SPACE1_DIM2};	/* dataspace dim sizes */
+    DATATYPE data_array1[SPACE1_DIM1][SPACE1_DIM2];	/* data buffer */
+
+    hsize_t start[SPACE1_RANK];			/* for hyperslab setting */
+    hsize_t count[SPACE1_RANK], stride[SPACE1_RANK];	/* for hyperslab setting */
+
+    herr_t ret;         	/* Generic return value */
+
+    MPI_Comm comm = MPI_COMM_WORLD;
+    MPI_Info info = MPI_INFO_NULL;
+
+    if (verbose)
+	printf("Independent write test on file %s\n", filename);
+
+    /* -------------------
+     * START AN HDF5 FILE
+     * -------------------*/
+    /* setup file access template with parallel IO access. */
+    acc_tpl1 = H5Pcreate (H5P_FILE_ACCESS);
+    assert(acc_tpl1 != FAIL);
+    MESG("H5Pcreate access succeed");
+    /* set Parallel access with communicator */
+    ret = H5Pset_fapl_mpio(acc_tpl1, comm, info);
+    assert(ret != FAIL);
+    MESG("H5Pset_fapl_mpio succeed");
+
+    /* create the file collectively */
+    fid1 = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, acc_tpl1);
+    assert(fid1 != FAIL);
+    MESG("H5Fcreate succeed");
+
+    /* Release file-access template */
+    ret = H5Pclose(acc_tpl1);
+    assert(ret != FAIL);
+
+
+    /* --------------------------
+     * Define the dimensions of the overall datasets
+     * and the slabs local to the MPI process.
+     * ------------------------- */
+    /* setup dimensionality object */
+    sid1 = H5Screate_simple(SPACE1_RANK, dims1, NULL);
+    assert (sid1 != FAIL);
+    MESG("H5Screate_simple succeed");
+
+
+    /* create a dataset collectively */
+    dataset1 = H5Dcreate2(fid1, DATASETNAME1, H5T_NATIVE_INT, sid1,
+			H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+    assert(dataset1 != FAIL);
+    MESG("H5Dcreate2 succeed");
+
+    /* create another dataset collectively */
+    dataset2 = H5Dcreate2(fid1, DATASETNAME2, H5T_NATIVE_INT, sid1,
+			H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+    assert(dataset2 != FAIL);
+    MESG("H5Dcreate2 succeed");
+
+
+
+    /* set up dimensions of the slab this process accesses */
+    start[0] = mpi_rank*SPACE1_DIM1/mpi_size;
+    start[1] = 0;
+    count[0] = SPACE1_DIM1/mpi_size;
+    count[1] = SPACE1_DIM2;
+    stride[0] = 1;
+    stride[1] =1;
+if (verbose)
+    printf("start[]=(%lu,%lu), count[]=(%lu,%lu), total datapoints=%lu\n",
+	(unsigned long)start[0], (unsigned long)start[1],
+        (unsigned long)count[0], (unsigned long)count[1],
+        (unsigned long)(count[0]*count[1]));
+
+    /* put some trivial data in the data_array */
+    dataset_fill(start, count, stride, &data_array1[0][0]);
+    MESG("data_array initialized");
+
+    /* create a file dataspace independently */
+    file_dataspace = H5Dget_space (dataset1);
+    assert(file_dataspace != FAIL);
+    MESG("H5Dget_space succeed");
+    ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride,
+	    count, NULL);
+    assert(ret != FAIL);
+    MESG("H5Sset_hyperslab succeed");
+
+    /* create a memory dataspace independently */
+    mem_dataspace = H5Screate_simple (SPACE1_RANK, count, NULL);
+    assert (mem_dataspace != FAIL);
+
+    /* write data independently */
+    ret = H5Dwrite(dataset1, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
+	    H5P_DEFAULT, data_array1);
+    assert(ret != FAIL);
+    MESG("H5Dwrite succeed");
+
+    /* write data independently */
+    ret = H5Dwrite(dataset2, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
+	    H5P_DEFAULT, data_array1);
+    assert(ret != FAIL);
+    MESG("H5Dwrite succeed");
+
+    /* release dataspace ID */
+    H5Sclose(file_dataspace);
+
+    /* close dataset collectively */
+    ret=H5Dclose(dataset1);
+    assert(ret != FAIL);
+    MESG("H5Dclose1 succeed");
+    ret=H5Dclose(dataset2);
+    assert(ret != FAIL);
+    MESG("H5Dclose2 succeed");
+
+    /* release all IDs created */
+    H5Sclose(sid1);
+
+    /* close the file collectively */
+    H5Fclose(fid1);
+}
+
+/* Example of using the parallel HDF5 library to read a dataset */
+void
+phdf5readInd(char *filename)
+{
+    hid_t fid1;			/* HDF5 file IDs */
+    hid_t acc_tpl1;		/* File access templates */
+    hid_t file_dataspace;	/* File dataspace ID */
+    hid_t mem_dataspace;	/* memory dataspace ID */
+    hid_t dataset1, dataset2;	/* Dataset ID */
+    DATATYPE data_array1[SPACE1_DIM1][SPACE1_DIM2];	/* data buffer */
+    DATATYPE data_origin1[SPACE1_DIM1][SPACE1_DIM2];	/* expected data buffer */
+
+    hsize_t start[SPACE1_RANK];			/* for hyperslab setting */
+    hsize_t count[SPACE1_RANK], stride[SPACE1_RANK];	/* for hyperslab setting */
+
+    herr_t ret;         	/* Generic return value */
+
+    MPI_Comm comm = MPI_COMM_WORLD;
+    MPI_Info info = MPI_INFO_NULL;
+
+    if (verbose)
+	printf("Independent read test on file %s\n", filename);
+
+    /* setup file access template */
+    acc_tpl1 = H5Pcreate (H5P_FILE_ACCESS);
+    assert(acc_tpl1 != FAIL);
+    /* set Parallel access with communicator */
+    ret = H5Pset_fapl_mpio(acc_tpl1, comm, info);
+    assert(ret != FAIL);
+
+
+    /* open the file collectively */
+    fid1=H5Fopen(filename,H5F_ACC_RDWR,acc_tpl1);
+    assert(fid1 != FAIL);
+
+    /* Release file-access template */
+    ret=H5Pclose(acc_tpl1);
+    assert(ret != FAIL);
+
+    /* open the dataset1 collectively */
+    dataset1 = H5Dopen2(fid1, DATASETNAME1, H5P_DEFAULT);
+    assert(dataset1 != FAIL);
+
+    /* open another dataset collectively */
+    dataset2 = H5Dopen2(fid1, DATASETNAME1, H5P_DEFAULT);
+    assert(dataset2 != FAIL);
+
+
+    /* set up dimensions of the slab this process accesses */
+    start[0] = mpi_rank*SPACE1_DIM1/mpi_size;
+    start[1] = 0;
+    count[0] = SPACE1_DIM1/mpi_size;
+    count[1] = SPACE1_DIM2;
+    stride[0] = 1;
+    stride[1] =1;
+if (verbose)
+    printf("start[]=(%lu,%lu), count[]=(%lu,%lu), total datapoints=%lu\n",
+        (unsigned long)start[0], (unsigned long)start[1],
+        (unsigned long)count[0], (unsigned long)count[1],
+        (unsigned long)(count[0]*count[1]));
+
+    /* create a file dataspace independently */
+    file_dataspace = H5Dget_space (dataset1);
+    assert(file_dataspace != FAIL);
+    ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride,
+	    count, NULL);
+    assert(ret != FAIL);
+
+    /* create a memory dataspace independently */
+    mem_dataspace = H5Screate_simple (SPACE1_RANK, count, NULL);
+    assert (mem_dataspace != FAIL);
+
+    /* fill dataset with test data */
+    dataset_fill(start, count, stride, &data_origin1[0][0]);
+
+    /* read data independently */
+    ret = H5Dread(dataset1, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
+	    H5P_DEFAULT, data_array1);
+    assert(ret != FAIL);
+
+    /* verify the read data with original expected data */
+    ret = dataset_vrfy(start, count, stride, &data_array1[0][0], &data_origin1[0][0]);
+    assert(ret != FAIL);
+
+    /* read data independently */
+    ret = H5Dread(dataset2, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
+	    H5P_DEFAULT, data_array1);
+    assert(ret != FAIL);
+
+    /* verify the read data with original expected data */
+    ret = dataset_vrfy(start, count, stride, &data_array1[0][0], &data_origin1[0][0]);
+    assert(ret == 0);
+
+    /* close dataset collectively */
+    ret=H5Dclose(dataset1);
+    assert(ret != FAIL);
+    ret=H5Dclose(dataset2);
+    assert(ret != FAIL);
+
+    /* release all IDs created */
+    H5Sclose(file_dataspace);
+
+    /* close the file collectively */
+    H5Fclose(fid1);
+}
+
+
+/*
+ * Example of using the parallel HDF5 library to create two datasets
+ * in one HDF5 file with collective parallel access support.
+ * The Datasets are of sizes (number-of-mpi-processes x DIM1) x DIM2.
+ * Each process controls only a slab of size DIM1 x DIM2 within each
+ * dataset. [Note: not so yet.  Datasets are of sizes DIM1xDIM2 and
+ * each process controls a hyperslab within.]
+ */
+
+void
+phdf5writeAll(char *filename)
+{
+    hid_t fid1;			/* HDF5 file IDs */
+    hid_t acc_tpl1;		/* File access templates */
+    hid_t xfer_plist;		/* Dataset transfer properties list */
+    hid_t sid1;   		/* Dataspace ID */
+    hid_t file_dataspace;	/* File dataspace ID */
+    hid_t mem_dataspace;	/* memory dataspace ID */
+    hid_t dataset1, dataset2;	/* Dataset ID */
+    hsize_t dims1[SPACE1_RANK] =
+	{SPACE1_DIM1,SPACE1_DIM2};	/* dataspace dim sizes */
+    DATATYPE data_array1[SPACE1_DIM1][SPACE1_DIM2];	/* data buffer */
+
+    hsize_t start[SPACE1_RANK];			/* for hyperslab setting */
+    hsize_t count[SPACE1_RANK], stride[SPACE1_RANK];	/* for hyperslab setting */
+
+    herr_t ret;         	/* Generic return value */
+
+    MPI_Comm comm = MPI_COMM_WORLD;
+    MPI_Info info = MPI_INFO_NULL;
+
+    if (verbose)
+	printf("Collective write test on file %s\n", filename);
+
+    /* -------------------
+     * START AN HDF5 FILE
+     * -------------------*/
+    /* setup file access template with parallel IO access. */
+    acc_tpl1 = H5Pcreate (H5P_FILE_ACCESS);
+    assert(acc_tpl1 != FAIL);
+    MESG("H5Pcreate access succeed");
+    /* set Parallel access with communicator */
+    ret = H5Pset_fapl_mpio(acc_tpl1, comm, info);
+    assert(ret != FAIL);
+    MESG("H5Pset_fapl_mpio succeed");
+
+    /* create the file collectively */
+    fid1=H5Fcreate(filename,H5F_ACC_TRUNC,H5P_DEFAULT,acc_tpl1);
+    assert(fid1 != FAIL);
+    MESG("H5Fcreate succeed");
+
+    /* Release file-access template */
+    ret=H5Pclose(acc_tpl1);
+    assert(ret != FAIL);
+
+
+    /* --------------------------
+     * Define the dimensions of the overall datasets
+     * and create the dataset
+     * ------------------------- */
+    /* setup dimensionality object */
+    sid1 = H5Screate_simple (SPACE1_RANK, dims1, NULL);
+    assert (sid1 != FAIL);
+    MESG("H5Screate_simple succeed");
+
+
+    /* create a dataset collectively */
+    dataset1 = H5Dcreate2(fid1, DATASETNAME1, H5T_NATIVE_INT, sid1, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+    assert(dataset1 != FAIL);
+    MESG("H5Dcreate2 succeed");
+
+    /* create another dataset collectively */
+    dataset2 = H5Dcreate2(fid1, DATASETNAME2, H5T_NATIVE_INT, sid1, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+    assert(dataset2 != FAIL);
+    MESG("H5Dcreate2 2 succeed");
+
+    /*
+     * Set up dimensions of the slab this process accesses.
+     */
+
+    /* Dataset1: each process takes a block of rows. */
+    slab_set(start, count, stride, BYROW);
+if (verbose)
+    printf("start[]=(%lu,%lu), count[]=(%lu,%lu), total datapoints=%lu\n",
+	(unsigned long)start[0], (unsigned long)start[1],
+        (unsigned long)count[0], (unsigned long)count[1],
+        (unsigned long)(count[0]*count[1]));
+
+    /* create a file dataspace independently */
+    file_dataspace = H5Dget_space (dataset1);
+    assert(file_dataspace != FAIL);
+    MESG("H5Dget_space succeed");
+    ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride,
+	    count, NULL);
+    assert(ret != FAIL);
+    MESG("H5Sset_hyperslab succeed");
+
+    /* create a memory dataspace independently */
+    mem_dataspace = H5Screate_simple (SPACE1_RANK, count, NULL);
+    assert (mem_dataspace != FAIL);
+
+    /* fill the local slab with some trivial data */
+    dataset_fill(start, count, stride, &data_array1[0][0]);
+    MESG("data_array initialized");
+    if (verbose){
+	MESG("data_array created");
+	dataset_print(start, count, stride, &data_array1[0][0]);
+    }
+
+    /* set up the collective transfer properties list */
+    xfer_plist = H5Pcreate (H5P_DATASET_XFER);
+    assert(xfer_plist != FAIL);
+    ret=H5Pset_dxpl_mpio(xfer_plist, H5FD_MPIO_COLLECTIVE);
+    assert(ret != FAIL);
+    MESG("H5Pcreate xfer succeed");
+
+    /* write data collectively */
+    ret = H5Dwrite(dataset1, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
+	    xfer_plist, data_array1);
+    assert(ret != FAIL);
+    MESG("H5Dwrite succeed");
+
+    /* release all temporary handles. */
+    /* Could have used them for dataset2 but it is cleaner */
+    /* to create them again.*/
+    H5Sclose(file_dataspace);
+    H5Sclose(mem_dataspace);
+    H5Pclose(xfer_plist);
+
+    /* Dataset2: each process takes a block of columns. */
+    slab_set(start, count, stride, BYCOL);
+if (verbose)
+    printf("start[]=(%lu,%lu), count[]=(%lu,%lu), total datapoints=%lu\n",
+	(unsigned long)start[0], (unsigned long)start[1],
+        (unsigned long)count[0], (unsigned long)count[1],
+        (unsigned long)(count[0]*count[1]));
+
+    /* put some trivial data in the data_array */
+    dataset_fill(start, count, stride, &data_array1[0][0]);
+    MESG("data_array initialized");
+    if (verbose){
+	MESG("data_array created");
+	dataset_print(start, count, stride, &data_array1[0][0]);
+    }
+
+    /* create a file dataspace independently */
+    file_dataspace = H5Dget_space (dataset1);
+    assert(file_dataspace != FAIL);
+    MESG("H5Dget_space succeed");
+    ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride,
+	    count, NULL);
+    assert(ret != FAIL);
+    MESG("H5Sset_hyperslab succeed");
+
+    /* create a memory dataspace independently */
+    mem_dataspace = H5Screate_simple (SPACE1_RANK, count, NULL);
+    assert (mem_dataspace != FAIL);
+
+    /* fill the local slab with some trivial data */
+    dataset_fill(start, count, stride, &data_array1[0][0]);
+    MESG("data_array initialized");
+    if (verbose){
+	MESG("data_array created");
+	dataset_print(start, count, stride, &data_array1[0][0]);
+    }
+
+    /* set up the collective transfer properties list */
+    xfer_plist = H5Pcreate (H5P_DATASET_XFER);
+    assert(xfer_plist != FAIL);
+    ret=H5Pset_dxpl_mpio(xfer_plist, H5FD_MPIO_COLLECTIVE);
+    assert(ret != FAIL);
+    MESG("H5Pcreate xfer succeed");
+
+    /* write data independently */
+    ret = H5Dwrite(dataset2, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
+	    xfer_plist, data_array1);
+    assert(ret != FAIL);
+    MESG("H5Dwrite succeed");
+
+    /* release all temporary handles. */
+    H5Sclose(file_dataspace);
+    H5Sclose(mem_dataspace);
+    H5Pclose(xfer_plist);
+
+
+    /*
+     * All writes completed.  Close datasets collectively
+     */
+    ret=H5Dclose(dataset1);
+    assert(ret != FAIL);
+    MESG("H5Dclose1 succeed");
+    ret=H5Dclose(dataset2);
+    assert(ret != FAIL);
+    MESG("H5Dclose2 succeed");
+
+    /* release all IDs created */
+    H5Sclose(sid1);
+
+    /* close the file collectively */
+    H5Fclose(fid1);
+}
+
+/*
+ * Example of using the parallel HDF5 library to read two datasets
+ * in one HDF5 file with collective parallel access support.
+ * The Datasets are of sizes (number-of-mpi-processes x DIM1) x DIM2.
+ * Each process controls only a slab of size DIM1 x DIM2 within each
+ * dataset. [Note: not so yet.  Datasets are of sizes DIM1xDIM2 and
+ * each process controls a hyperslab within.]
+ */
+
+void
+phdf5readAll(char *filename)
+{
+    hid_t fid1;			/* HDF5 file IDs */
+    hid_t acc_tpl1;		/* File access templates */
+    hid_t xfer_plist;		/* Dataset transfer properties list */
+    hid_t file_dataspace;	/* File dataspace ID */
+    hid_t mem_dataspace;	/* memory dataspace ID */
+    hid_t dataset1, dataset2;	/* Dataset ID */
+    DATATYPE data_array1[SPACE1_DIM1][SPACE1_DIM2];	/* data buffer */
+    DATATYPE data_origin1[SPACE1_DIM1][SPACE1_DIM2];	/* expected data buffer */
+
+    hsize_t start[SPACE1_RANK];			/* for hyperslab setting */
+    hsize_t count[SPACE1_RANK], stride[SPACE1_RANK];	/* for hyperslab setting */
+
+    herr_t ret;         	/* Generic return value */
+
+    MPI_Comm comm = MPI_COMM_WORLD;
+    MPI_Info info = MPI_INFO_NULL;
+
+    if (verbose)
+	printf("Collective read test on file %s\n", filename);
+
+    /* -------------------
+     * OPEN AN HDF5 FILE
+     * -------------------*/
+    /* setup file access template with parallel IO access. */
+    acc_tpl1 = H5Pcreate (H5P_FILE_ACCESS);
+    assert(acc_tpl1 != FAIL);
+    MESG("H5Pcreate access succeed");
+    /* set Parallel access with communicator */
+    ret = H5Pset_fapl_mpio(acc_tpl1, comm, info);
+    assert(ret != FAIL);
+    MESG("H5Pset_fapl_mpio succeed");
+
+    /* open the file collectively */
+    fid1=H5Fopen(filename,H5F_ACC_RDWR,acc_tpl1);
+    assert(fid1 != FAIL);
+    MESG("H5Fopen succeed");
+
+    /* Release file-access template */
+    ret=H5Pclose(acc_tpl1);
+    assert(ret != FAIL);
+
+
+    /* --------------------------
+     * Open the datasets in it
+     * ------------------------- */
+    /* open the dataset1 collectively */
+    dataset1 = H5Dopen2(fid1, DATASETNAME1, H5P_DEFAULT);
+    assert(dataset1 != FAIL);
+    MESG("H5Dopen2 succeed");
+
+    /* open another dataset collectively */
+    dataset2 = H5Dopen2(fid1, DATASETNAME1, H5P_DEFAULT);
+    assert(dataset2 != FAIL);
+    MESG("H5Dopen2 2 succeed");
+
+    /*
+     * Set up dimensions of the slab this process accesses.
+     */
+
+    /* Dataset1: each process takes a block of columns. */
+    slab_set(start, count, stride, BYCOL);
+if (verbose)
+    printf("start[]=(%lu,%lu), count[]=(%lu,%lu), total datapoints=%lu\n",
+	(unsigned long)start[0], (unsigned long)start[1],
+        (unsigned long)count[0], (unsigned long)count[1],
+        (unsigned long)(count[0]*count[1]));
+
+    /* create a file dataspace independently */
+    file_dataspace = H5Dget_space (dataset1);
+    assert(file_dataspace != FAIL);
+    MESG("H5Dget_space succeed");
+    ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride,
+	    count, NULL);
+    assert(ret != FAIL);
+    MESG("H5Sset_hyperslab succeed");
+
+    /* create a memory dataspace independently */
+    mem_dataspace = H5Screate_simple (SPACE1_RANK, count, NULL);
+    assert (mem_dataspace != FAIL);
+
+    /* fill dataset with test data */
+    dataset_fill(start, count, stride, &data_origin1[0][0]);
+    MESG("data_array initialized");
+    if (verbose){
+	MESG("data_array created");
+	dataset_print(start, count, stride, &data_array1[0][0]);
+    }
+
+    /* set up the collective transfer properties list */
+    xfer_plist = H5Pcreate (H5P_DATASET_XFER);
+    assert(xfer_plist != FAIL);
+    ret=H5Pset_dxpl_mpio(xfer_plist, H5FD_MPIO_COLLECTIVE);
+    assert(ret != FAIL);
+    MESG("H5Pcreate xfer succeed");
+
+    /* read data collectively */
+    ret = H5Dread(dataset1, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
+	    xfer_plist, data_array1);
+    assert(ret != FAIL);
+    MESG("H5Dread succeed");
+
+    /* verify the read data with original expected data */
+    ret = dataset_vrfy(start, count, stride, &data_array1[0][0], &data_origin1[0][0]);
+    assert(ret != FAIL);
+
+    /* release all temporary handles. */
+    /* Could have used them for dataset2 but it is cleaner */
+    /* to create them again.*/
+    H5Sclose(file_dataspace);
+    H5Sclose(mem_dataspace);
+    H5Pclose(xfer_plist);
+
+    /* Dataset2: each process takes a block of rows. */
+    slab_set(start, count, stride, BYROW);
+if (verbose)
+    printf("start[]=(%lu,%lu), count[]=(%lu,%lu), total datapoints=%lu\n",
+	(unsigned long)start[0], (unsigned long)start[1],
+        (unsigned long)count[0], (unsigned long)count[1],
+        (unsigned long)(count[0]*count[1]));
+
+    /* create a file dataspace independently */
+    file_dataspace = H5Dget_space (dataset1);
+    assert(file_dataspace != FAIL);
+    MESG("H5Dget_space succeed");
+    ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride,
+	    count, NULL);
+    assert(ret != FAIL);
+    MESG("H5Sset_hyperslab succeed");
+
+    /* create a memory dataspace independently */
+    mem_dataspace = H5Screate_simple (SPACE1_RANK, count, NULL);
+    assert (mem_dataspace != FAIL);
+
+    /* fill dataset with test data */
+    dataset_fill(start, count, stride, &data_origin1[0][0]);
+    MESG("data_array initialized");
+    if (verbose){
+	MESG("data_array created");
+	dataset_print(start, count, stride, &data_array1[0][0]);
+    }
+
+    /* set up the collective transfer properties list */
+    xfer_plist = H5Pcreate (H5P_DATASET_XFER);
+    assert(xfer_plist != FAIL);
+    ret=H5Pset_dxpl_mpio(xfer_plist, H5FD_MPIO_COLLECTIVE);
+    assert(ret != FAIL);
+    MESG("H5Pcreate xfer succeed");
+
+    /* read data independently */
+    ret = H5Dread(dataset2, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
+	    xfer_plist, data_array1);
+    assert(ret != FAIL);
+    MESG("H5Dread succeed");
+
+    /* verify the read data with original expected data */
+    ret = dataset_vrfy(start, count, stride, &data_array1[0][0], &data_origin1[0][0]);
+    assert(ret != FAIL);
+
+    /* release all temporary handles. */
+    H5Sclose(file_dataspace);
+    H5Sclose(mem_dataspace);
+    H5Pclose(xfer_plist);
+
+
+    /*
+     * All reads completed.  Close datasets collectively
+     */
+    ret=H5Dclose(dataset1);
+    assert(ret != FAIL);
+    MESG("H5Dclose1 succeed");
+    ret=H5Dclose(dataset2);
+    assert(ret != FAIL);
+    MESG("H5Dclose2 succeed");
+
+    /* close the file collectively */
+    H5Fclose(fid1);
+}
+
+/*
+ * test file access by communicator besides COMM_WORLD.
+ * Split COMM_WORLD into two, one (even_comm) contains the original
+ * processes of even ranks.  The other (odd_comm) contains the original
+ * processes of odd ranks.  Processes in even_comm creates a file, then
+ * cloose it, using even_comm.  Processes in old_comm just do a barrier
+ * using odd_comm.  Then they all do a barrier using COMM_WORLD.
+ * If the file creation and cloose does not do correct collective action
+ * according to the communicator argument, the processes will freeze up
+ * sooner or later due to barrier mixed up.
+ */
+void
+test_split_comm_access(char filenames[][PATH_MAX])
+{
+    MPI_Comm comm;
+    MPI_Info info = MPI_INFO_NULL;
+    int color, mrc;
+    int newrank, newprocs;
+    hid_t fid;			/* file IDs */
+    hid_t acc_tpl;		/* File access properties */
+    herr_t ret;			/* generic return value */
+
+    if (verbose)
+	printf("Independent write test on file %s %s\n",
+	    filenames[0], filenames[1]);
+
+    color = mpi_rank%2;
+    mrc = MPI_Comm_split (MPI_COMM_WORLD, color, mpi_rank, &comm);
+    assert(mrc==MPI_SUCCESS);
+    MPI_Comm_size(comm,&newprocs);
+    MPI_Comm_rank(comm,&newrank);
+
+    if (color){
+	/* odd-rank processes */
+	mrc = MPI_Barrier(comm);
+	assert(mrc==MPI_SUCCESS);
+    }else{
+	/* even-rank processes */
+	/* setup file access template */
+	acc_tpl = H5Pcreate (H5P_FILE_ACCESS);
+	assert(acc_tpl != FAIL);
+
+	/* set Parallel access with communicator */
+	ret = H5Pset_fapl_mpio(acc_tpl, comm, info);
+	assert(ret != FAIL);
+
+	/* create the file collectively */
+	fid=H5Fcreate(filenames[color],H5F_ACC_TRUNC,H5P_DEFAULT,acc_tpl);
+	assert(fid != FAIL);
+	MESG("H5Fcreate succeed");
+
+	/* Release file-access template */
+	ret=H5Pclose(acc_tpl);
+	assert(ret != FAIL);
+
+	ret=H5Fclose(fid);
+	assert(ret != FAIL);
+    }
+    if (mpi_rank == 0){
+	mrc = MPI_File_delete(filenames[color], info);
+	assert(mrc==MPI_SUCCESS);
+    }
+}
+
+/*
+ * Show command usage
+ */
+void
+usage(void)
+{
+    printf("Usage: testphdf5 [-f <prefix>] [-r] [-w] [-v]\n");
+    printf("\t-f\tfile prefix for parallel test files.\n");
+    printf("\t  \te.g. pfs:/PFS/myname\n");
+    printf("\t  \tcan be set via $" PARAPREFIX ".\n");
+    printf("\t  \tDefault is current directory.\n");
+    printf("\t-c\tno cleanup\n");
+    printf("\t-r\tno read\n");
+    printf("\t-w\tno write\n");
+    printf("\t-v\tverbose on\n");
+    printf("\tdefault do write then read\n");
+    printf("\n");
+}
+
+
+/*
+ * compose the test filename with the prefix supplied.
+ * return code: 0 if no error
+ *              1 otherwise.
+ */
+int
+mkfilenames(char *prefix)
+{
+    int i, n;
+    size_t strsize;
+
+    /* filename will be prefix/ParaEgN.h5 where N is 0 to 9. */
+    /* So, string must be big enough to hold the prefix, / and 10 more chars */
+    /* and the terminating null. */
+    strsize = strlen(prefix) + 12;
+    if (strsize > PATH_MAX){
+	printf("File prefix too long;  Use a short path name.\n");
+	return(1);
+    }
+    n = sizeof(testfiles)/sizeof(testfiles[0]);
+    if (n > 9){
+	printf("Warning: Too many entries in testfiles. "
+	    "Need to adjust the code to accommodate the large size.\n");
+    }
+    for (i=0; i<n; i++){
+	sprintf(testfiles[i], "%s/ParaEg%d.h5", prefix, i);
+    }
+    return(0);
+
+}
+
+
+/*
+ * parse the command line options
+ */
+int
+parse_options(int argc, char **argv){
+    int i, n;
+
+    /* initialize testfiles to nulls */
+    n = sizeof(testfiles)/sizeof(testfiles[0]);
+    for (i=0; i<n; i++){
+	testfiles[i][0] = '\0';
+    }
+
+    while (--argc){
+	if (**(++argv) != '-'){
+	    break;
+	}else{
+	    switch(*(*argv+1)){
+		case 'f':   ++argv;
+			    if (--argc < 1){
+				usage();
+				nerrors++;
+				return(1);
+			    }
+			    if (mkfilenames(*argv)){
+				nerrors++;
+				return(1);
+			    }
+			    break;
+		case 'c':   docleanup = 0;	/* no cleanup */
+			    break;
+		case 'r':   doread = 0;
+			    break;
+		case 'w':   dowrite = 0;
+			    break;
+		case 'v':   verbose = 1;
+			    break;
+		default:    usage();
+			    nerrors++;
+			    return(1);
+	    }
+	}
+    }
+
+    /* check the file prefix */
+    if (testfiles[0][0] == '\0'){
+	/* try get it from environment variable HDF5_PARAPREFIX */
+	char *env;
+	char *env_default = ".";	/* default to current directory */
+	if ((env=getenv(PARAPREFIX))==NULL){
+	    env = env_default;
+	}
+	mkfilenames(env);
+    }
+    return(0);
+}
+
+
+/*
+ * cleanup test files created
+ */
+void
+cleanup(void)
+{
+    int i, n;
+
+    n = sizeof(testfiles)/sizeof(testfiles[0]);
+    for (i=0; i<n; i++){
+	MPI_File_delete(testfiles[i], MPI_INFO_NULL);
+    }
+}
+
+
+/* Main Program */
+int
+main(int argc, char **argv)
+{
+    int mpi_namelen;
+    char mpi_name[MPI_MAX_PROCESSOR_NAME];
+    int i, n;
+
+    MPI_Init(&argc,&argv);
+    MPI_Comm_size(MPI_COMM_WORLD,&mpi_size);
+    MPI_Comm_rank(MPI_COMM_WORLD,&mpi_rank);
+    MPI_Get_processor_name(mpi_name,&mpi_namelen);
+    /* Make sure datasets can be divided into equal chunks by the processes */
+    if ((SPACE1_DIM1 % mpi_size) || (SPACE1_DIM2 % mpi_size)){
+	printf("DIM1(%d) and DIM2(%d) must be multiples of processes (%d)\n",
+	    SPACE1_DIM1, SPACE1_DIM2, mpi_size);
+	nerrors++;
+	goto finish;
+    }
+
+    if (parse_options(argc, argv) != 0)
+	goto finish;
+
+    /* show test file names */
+    if (mpi_rank == 0){
+	n = sizeof(testfiles)/sizeof(testfiles[0]);
+	printf("Parallel test files are:\n");
+	for (i=0; i<n; i++){
+	    printf("   %s\n", testfiles[i]);
+	}
+    }
+
+    if (dowrite){
+	MPI_BANNER("testing PHDF5 dataset using split communicators...");
+	test_split_comm_access(testfiles);
+	MPI_BANNER("testing PHDF5 dataset independent write...");
+	phdf5writeInd(testfiles[0]);
+	MPI_BANNER("testing PHDF5 dataset collective write...");
+	phdf5writeAll(testfiles[1]);
+    }
+    if (doread){
+	MPI_BANNER("testing PHDF5 dataset independent read...");
+	phdf5readInd(testfiles[0]);
+	MPI_BANNER("testing PHDF5 dataset collective read...");
+	phdf5readAll(testfiles[1]);
+    }
+
+    if (!(dowrite || doread)){
+	usage();
+	nerrors++;
+    }
+
+finish:
+    if (mpi_rank == 0){		/* only process 0 reports */
+	if (nerrors)
+	    printf("***PHDF5 tests detected %d errors***\n", nerrors);
+	else{
+	    printf("===================================\n");
+	    printf("PHDF5 tests finished with no errors\n");
+	    printf("===================================\n");
+	}
+    }
+    if (docleanup)
+	cleanup();
+    MPI_Finalize();
+
+    return(nerrors);
+}
+
+#else /* H5_HAVE_PARALLEL */
+/* dummy program since H5_HAVE_PARALLE is not configured in */
+int
+main(void)
+{
+printf("No PHDF5 example because parallel is not configured in\n");
+return(0);
+}
+#endif /* H5_HAVE_PARALLEL */
diff --git a/privatemodules/nc4/share/hdf5_examples/c/run-c-ex.sh b/privatemodules/nc4/share/hdf5_examples/c/run-c-ex.sh
new file mode 100755
index 0000000000000000000000000000000000000000..415d2d0dc316c05727a08724478736f736a1f801
--- /dev/null
+++ b/privatemodules/nc4/share/hdf5_examples/c/run-c-ex.sh
@@ -0,0 +1,142 @@
+#! /bin/sh
+#
+# Copyright by The HDF Group.
+# All rights reserved.
+#
+# This file is part of HDF5.  The full HDF5 copyright notice, including
+# terms governing use, modification, and redistribution, is contained in
+# the files COPYING and Copyright.html.  COPYING can be found at the root
+# of the source code distribution tree; Copyright.html can be found at the
+# root level of an installed copy of the electronic HDF5 document set and
+# is linked from the top-level documents page.  It can also be found at
+# http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have
+# access to either file, you may request a copy from help@hdfgroup.org.
+
+#
+#  This file:  run-c-ex.sh
+# Written by:  Larry Knox
+#       Date:  May 11, 2010
+#
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+#                                                                               #
+# This script will compile and run the c examples from source files installed   #
+# in .../share/hdf5_examples/c using h5cc or h5pc.  The order for running       #
+# programs with RunTest in the MAIN section below is taken from the Makefile.   #
+# The order is important since some of the test programs use data files created #
+# by earlier test programs.  Any future additions should be placed accordingly. #
+#                                                                               #
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+
+# Initializations
+EXIT_SUCCESS=0
+EXIT_FAILURE=1
+ 
+# Where the tool is installed.
+# default is relative path to installed location of the tools 
+prefix="${prefix:-../../../}"
+PARALLEL=no             # Am I in parallel mode?
+AR="ar"
+RANLIB="ranlib"
+if [ "$PARALLEL" = no ]; then
+    H5TOOL="h5cc"               # The tool name
+else
+    H5TOOL="h5pcc"               # The tool name
+fi
+H5TOOL_BIN="${prefix}/bin/${H5TOOL}"   # The path of the tool binary
+
+#### Run test ####
+RunTest()
+{
+    TEST_EXEC=$1
+    Test=$1".c"
+
+    echo
+    echo "#################  $1  #################"
+    ${H5TOOL_BIN} -o $TEST_EXEC $Test
+    if [ $? -ne 0 ]
+    then
+        echo "messed up compiling $Test"
+        exit 1
+    fi
+    ./$TEST_EXEC
+}
+
+
+
+##################  MAIN  ##################
+
+if ! test -d red; then
+   mkdir red
+fi
+if ! test -d blue; then
+   mkdir blue
+fi
+if ! test -d u2w; then
+   mkdir u2w
+fi
+
+# Run tests
+if [ $? -eq 0 ]
+then
+    if (RunTest h5_crtdat &&\
+        rm h5_crtdat &&\
+        RunTest h5_extend &&\
+        rm h5_extend &&\
+        RunTest h5_rdwt &&\
+        rm h5_rdwt &&\
+        RunTest h5_crtatt &&\
+        rm h5_crtatt &&\
+        RunTest h5_crtgrp &&\
+        rm h5_crtgrp &&\
+        RunTest h5_crtgrpar &&\
+        rm h5_crtgrpar &&\
+        RunTest h5_crtgrpd &&\
+        rm h5_crtgrpd &&\
+        RunTest h5_subset &&\
+        rm h5_subset &&\
+        RunTest h5_cmprss &&\
+        rm h5_cmprss &&\
+        RunTest h5_write &&\
+        rm h5_write &&\
+        RunTest h5_read &&\
+        rm h5_read &&\
+        RunTest h5_extend_write &&\
+        rm h5_extend_write &&\
+        RunTest h5_chunk_read &&\
+        rm h5_chunk_read &&\
+        RunTest h5_compound &&\
+        rm h5_compound &&\
+        RunTest h5_group &&\
+        rm h5_group &&\
+        RunTest h5_select &&\
+        rm h5_select &&\
+        RunTest h5_attribute &&\
+        rm h5_attribute &&\
+        RunTest h5_mount &&\
+        rm h5_mount &&\
+        RunTest h5_reference &&\
+        rm h5_reference &&\
+        RunTest h5_drivers &&\
+        rm h5_drivers &&\
+        RunTest h5_ref2reg &&\
+        rm h5_ref2reg &&\
+        RunTest h5_extlink &&\
+        rm h5_extlink &&\
+        RunTest h5_elink_unix2win &&\
+        rm h5_elink_unix2win &&\
+        RunTest h5_shared_mesg &&\
+        rm h5_shared_mesg); then
+        EXIT_VALUE=${EXIT_SUCCESS}
+    else
+        EXIT_VALUE=${EXIT_FAILURE}
+    fi
+fi
+
+# Cleanup
+rm *.o
+rm *.h5
+rm -rf red blue u2w
+echo
+
+exit $EXIT_VALUE 
+
diff --git a/privatemodules/nc4/share/hdf5_examples/hl/c/ex_ds1.c b/privatemodules/nc4/share/hdf5_examples/hl/c/ex_ds1.c
new file mode 100644
index 0000000000000000000000000000000000000000..8b7e530786ed12fc1df8b45ef26d4da0eb08b31f
--- /dev/null
+++ b/privatemodules/nc4/share/hdf5_examples/hl/c/ex_ds1.c
@@ -0,0 +1,114 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include "hdf5.h"
+#include "hdf5_hl.h"
+
+
+#define RANK          2
+#define DIM_DATA      12
+#define DIM1_SIZE     3
+#define DIM2_SIZE     4
+#define DIM0          0
+#define DIM1          1
+
+#define DSET_NAME      "Mydata"
+#define DS_1_NAME      "Yaxis"
+#define DS_2_NAME      "Xaxis"
+
+int main(void)
+{
+
+ hid_t   fid;                                              /* file ID */
+ hid_t   did;                                              /* dataset ID */
+ hid_t   dsid;                                             /* DS dataset ID */
+ int     rank     = RANK;                                  /* rank of data dataset */
+ int     rankds   = 1;                                     /* rank of DS dataset */
+ hsize_t dims[RANK]  = {DIM1_SIZE,DIM2_SIZE};              /* size of data dataset */
+ int     buf[DIM_DATA] = {1,2,3,4,5,6,7,8,9,10,11,12};     /* data of data dataset */
+ hsize_t s1_dim[1]  = {DIM1_SIZE};                         /* size of DS 1 dataset */
+ hsize_t s2_dim[1]  = {DIM2_SIZE};                         /* size of DS 2 dataset */
+ float   s1_wbuf[DIM1_SIZE] = {10,20,30};                  /* data of DS 1 dataset */
+ int     s2_wbuf[DIM2_SIZE] = {10,20,50,100};              /* data of DS 2 dataset */
+
+
+ /* create a file using default properties */
+ if ((fid=H5Fcreate("ex_ds1.h5",H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT))<0)
+  goto out;
+
+ /* make a dataset */
+ if (H5LTmake_dataset_int(fid,DSET_NAME,rank,dims,buf)<0)
+  goto out;
+
+ /* make a DS dataset for the first dimension */
+ if (H5LTmake_dataset_float(fid,DS_1_NAME,rankds,s1_dim,s1_wbuf)<0)
+  goto out;
+
+ /* make a DS dataset for the second dimension */
+ if (H5LTmake_dataset_int(fid,DS_2_NAME,rankds,s2_dim,s2_wbuf)<0)
+  goto out;
+
+
+/*-------------------------------------------------------------------------
+ * attach the DS_1_NAME dimension scale to DSET_NAME at dimension 0
+ *-------------------------------------------------------------------------
+ */
+
+ /* get the dataset id for DSET_NAME */
+ if ((did = H5Dopen2(fid,DSET_NAME, H5P_DEFAULT))<0)
+  goto out;
+
+ /* get the DS dataset id */
+ if ((dsid = H5Dopen2(fid,DS_1_NAME, H5P_DEFAULT))<0)
+  goto out;
+
+ /* attach the DS_1_NAME dimension scale to DSET_NAME at dimension index 0 */
+ if (H5DSattach_scale(did,dsid,DIM0)<0)
+  goto out;
+
+ /* close DS id */
+ if (H5Dclose(dsid)<0)
+  goto out;
+
+/*-------------------------------------------------------------------------
+ * attach the DS_2_NAME dimension scale to DSET_NAME
+ *-------------------------------------------------------------------------
+ */
+
+ /* get the DS dataset id */
+ if ((dsid = H5Dopen2(fid,DS_2_NAME, H5P_DEFAULT))<0)
+  goto out;
+
+ /* attach the DS_2_NAME dimension scale to DSET_NAME as the 2nd dimension (index 1)  */
+ if (H5DSattach_scale(did,dsid,DIM1)<0)
+  goto out;
+
+ /* close DS id */
+ if (H5Dclose(dsid)<0)
+  goto out;
+
+ /* close file */
+ H5Fclose(fid);
+
+ return 0;
+
+out:
+ printf("Error on return function...Exiting\n");
+ return 1;
+
+}
+
+
+
diff --git a/privatemodules/nc4/share/hdf5_examples/hl/c/ex_image1.c b/privatemodules/nc4/share/hdf5_examples/hl/c/ex_image1.c
new file mode 100644
index 0000000000000000000000000000000000000000..96bc7c7e33e540954c66643a3351b6c3ee8e7466
--- /dev/null
+++ b/privatemodules/nc4/share/hdf5_examples/hl/c/ex_image1.c
@@ -0,0 +1,72 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include "hdf5.h"
+#include "hdf5_hl.h"
+
+#define WIDTH         400
+#define HEIGHT        200
+#define PAL_ENTRIES   9
+unsigned char buf [ WIDTH*HEIGHT ];
+
+int main( void )
+{
+ hid_t         file_id;
+ herr_t        status;
+ hsize_t       pal_dims[] = {PAL_ENTRIES,3};
+ size_t        i, j;
+ int           n, space;
+ unsigned char pal[PAL_ENTRIES*3] = {  /* create a palette with 9 colors */
+ 0,0,168,      /* dark blue */
+ 0,0,252,      /* blue */
+ 0,168,252,    /* ocean blue */
+ 84,252,252,   /* light blue */
+ 168,252,168,  /* light green */
+ 0,252,168,    /* green */
+ 252,252,84,   /* yellow */
+ 252,168,0,    /* orange */
+ 252,0,0};     /* red */
+
+ /* create an image of 9 values divided evenly by the array */
+ space = WIDTH*HEIGHT / PAL_ENTRIES;
+ for (i=0, j=0, n=0; i < WIDTH*HEIGHT; i++, j++ )
+ {
+  buf[i] = n;
+  if ( j > space )
+  {
+   n++;
+   j=0;
+  }
+  if (n>PAL_ENTRIES-1) n=0;
+ }
+
+ /* create a new HDF5 file using default properties. */
+ file_id = H5Fcreate( "ex_image1.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT );
+
+ /* make the image */
+ status = H5IMmake_image_8bit( file_id, "image1", (hsize_t)WIDTH, (hsize_t)HEIGHT, buf );
+
+ /* make a palette */
+ status = H5IMmake_palette( file_id, "pallete", pal_dims, pal );
+
+ /* attach the palette to the image */
+ status = H5IMlink_palette( file_id, "image1", "pallete" );
+
+ /* close the file. */
+ status = H5Fclose( file_id );
+
+ return 0;
+
+}
diff --git a/privatemodules/nc4/share/hdf5_examples/hl/c/ex_image2.c b/privatemodules/nc4/share/hdf5_examples/hl/c/ex_image2.c
new file mode 100644
index 0000000000000000000000000000000000000000..3276f7c60eff5a01a40c96dbcec22ec794a1759b
--- /dev/null
+++ b/privatemodules/nc4/share/hdf5_examples/hl/c/ex_image2.c
@@ -0,0 +1,186 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include "hdf5.h"
+#include "hdf5_hl.h"
+#include <stdlib.h>
+#include <string.h>
+
+#define DATA_FILE1   "image8.txt"
+#define DATA_FILE2   "image24pixel.txt"
+#define IMAGE1_NAME  "image8bit"
+#define IMAGE2_NAME  "image24bitpixel"
+#define PAL_NAME     "palette"
+#define PAL_ENTRIES  256
+
+static int    read_data(const char* file_name, hsize_t *width, hsize_t *height );
+unsigned char *gbuf = NULL;  /* global buffer for image data */
+
+int main( void )
+{
+ hid_t          file_id;                       /* HDF5 file identifier */
+ hsize_t        width;                         /* width of image */
+ hsize_t        height;                        /* height of image */
+ unsigned char  pal[ PAL_ENTRIES * 3 ];        /* palette array */
+ hsize_t        pal_dims[2] = {PAL_ENTRIES,3}; /* palette dimensions */
+ herr_t         status, i, n;
+
+ /* create a new HDF5 file using default properties. */
+ file_id = H5Fcreate( "ex_image2.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT );
+
+ /* read first data file */
+ if (read_data(DATA_FILE1,&width,&height)<0)
+  goto out;
+
+ /* make the image */
+ status=H5IMmake_image_8bit( file_id, IMAGE1_NAME, width, height, gbuf );
+ if (gbuf) {
+    free(gbuf);
+    gbuf = NULL;
+ }
+
+/*-------------------------------------------------------------------------
+ * define a palette, blue to red tones
+ *-------------------------------------------------------------------------
+ */
+ for ( i=0, n=0; i<PAL_ENTRIES*3; i+=3, n++)
+ {
+  pal[i]  =n;      /* red */
+  pal[i+1]=0;      /* green */
+  pal[i+2]=255-n;  /* blue */
+ }
+
+ /* make a palette */
+ status=H5IMmake_palette( file_id, PAL_NAME, pal_dims, pal );
+
+ /* attach the palette to the image */
+ status=H5IMlink_palette( file_id, IMAGE1_NAME, PAL_NAME );
+
+/*-------------------------------------------------------------------------
+ * True color image example with pixel interlace
+ *-------------------------------------------------------------------------
+ */
+
+ /* read second data file */
+ if (read_data(DATA_FILE2,&width,&height)<0)
+  goto out;
+
+ /* make dataset */
+ status=H5IMmake_image_24bit( file_id, IMAGE2_NAME, width, height, "INTERLACE_PIXEL", gbuf );
+
+ /* close the file. */
+ H5Fclose( file_id );
+
+ if(gbuf) {
+    free(gbuf);
+    gbuf = NULL;
+ }
+
+ return 0;
+
+out:
+ printf("Error on return function...Exiting\n");
+
+ if(gbuf) {
+    free(gbuf);
+    gbuf = NULL;
+ }
+
+ return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * read_data
+ * utility function to read ASCII image data
+ * the files have a header of the type
+ *
+ *   components
+ *   n
+ *   height
+ *   n
+ *   width
+ *   n
+ *
+ * followed by the image data
+ *
+ *-------------------------------------------------------------------------
+ */
+
+static int read_data( const char* fname, /*IN*/
+                      hsize_t *width, /*OUT*/
+                      hsize_t *height /*OUT*/ )
+{
+ int    i, n;
+ int    color_planes;
+ char   str[20];
+ FILE   *f;
+ int    w, h;
+ char   *srcdir = getenv("srcdir"); /* the source directory */
+ char   data_file[512]="";          /* buffer to hold name of existing data file */
+
+/*-------------------------------------------------------------------------
+ * compose the name of the file to open, using "srcdir", if appropriate
+ *-------------------------------------------------------------------------
+ */
+ strcpy(data_file, "");
+ if (srcdir)
+ {
+  strcpy(data_file, srcdir);
+  strcat(data_file, "/");
+ }
+ strcat(data_file,fname);
+
+/*-------------------------------------------------------------------------
+ * read
+ *-------------------------------------------------------------------------
+ */
+
+ f = fopen(data_file, "r");
+ if ( f == NULL )
+ {
+  printf( "Could not open file %s. Try set $srcdir \n", data_file );
+  return -1;
+ }
+
+ fscanf( f, "%s", str );
+ fscanf( f, "%d", &color_planes );
+ fscanf( f, "%s", str );
+ fscanf( f, "%d", &h);
+ fscanf( f, "%s", str );
+ fscanf( f, "%d", &w);
+
+ *width = (hsize_t)w;
+ *height = (hsize_t)h;
+
+ if ( gbuf )
+ {
+  free( gbuf );
+  gbuf=NULL;
+ }
+
+ gbuf = (unsigned char*) malloc (w * h * color_planes * sizeof( unsigned char ));
+
+ for (i = 0; i < h * w * color_planes ; i++)
+ {
+  fscanf( f, "%d",&n );
+  gbuf[i] = (unsigned char)n;
+ }
+ fclose(f);
+
+ return 1;
+
+}
+
diff --git a/privatemodules/nc4/share/hdf5_examples/hl/c/ex_lite1.c b/privatemodules/nc4/share/hdf5_examples/hl/c/ex_lite1.c
new file mode 100644
index 0000000000000000000000000000000000000000..2a82fef1b683ec8ac3893b8395fb8be490a78d2e
--- /dev/null
+++ b/privatemodules/nc4/share/hdf5_examples/hl/c/ex_lite1.c
@@ -0,0 +1,42 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+
+#include "hdf5.h"
+#include "hdf5_hl.h"
+
+#define RANK 2
+
+
+int main( void )
+{
+ hid_t       file_id;
+ hsize_t     dims[RANK]={2,3};
+ int         data[6]={1,2,3,4,5,6};
+ herr_t      status;
+
+ /* create a HDF5 file */
+ file_id = H5Fcreate ("ex_lite1.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+ /* create and write an integer type dataset named "dset" */
+ status = H5LTmake_dataset(file_id,"/dset",RANK,dims,H5T_NATIVE_INT,data);
+
+ /* close file */
+ status = H5Fclose (file_id);
+
+ return 0;
+}
+
+
diff --git a/privatemodules/nc4/share/hdf5_examples/hl/c/ex_lite2.c b/privatemodules/nc4/share/hdf5_examples/hl/c/ex_lite2.c
new file mode 100644
index 0000000000000000000000000000000000000000..98f92c8d90f780093dc66ec22893775025ccfc44
--- /dev/null
+++ b/privatemodules/nc4/share/hdf5_examples/hl/c/ex_lite2.c
@@ -0,0 +1,54 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include "hdf5.h"
+#include "hdf5_hl.h"
+
+int main( void )
+{
+ hid_t       file_id;
+ int         data[6];
+ hsize_t     dims[2];
+ herr_t      status;
+ size_t     i, j, nrow, n_values;
+
+ /* open file from ex_lite1.c */
+ file_id = H5Fopen ("ex_lite1.h5", H5F_ACC_RDONLY, H5P_DEFAULT);
+
+ /* read dataset */
+ status = H5LTread_dataset_int(file_id,"/dset",data);
+
+ /* get the dimensions of the dataset */
+ status = H5LTget_dataset_info(file_id,"/dset",dims,NULL,NULL);
+
+ /* print it by rows */
+ n_values = (size_t)(dims[0] * dims[1]);
+ nrow = (size_t)dims[1];
+ for (i=0; i<n_values/nrow; i++ )
+ {
+  for (j=0; j<nrow; j++)
+   printf ("  %d", data[i*nrow + j]);
+  printf ("\n");
+ }
+
+ /* close file */
+ status = H5Fclose (file_id);
+
+ return 0;
+
+
+}
+
+
diff --git a/privatemodules/nc4/share/hdf5_examples/hl/c/ex_lite3.c b/privatemodules/nc4/share/hdf5_examples/hl/c/ex_lite3.c
new file mode 100644
index 0000000000000000000000000000000000000000..9164c7b5861f4424446a88946ea069bee64d2cd1
--- /dev/null
+++ b/privatemodules/nc4/share/hdf5_examples/hl/c/ex_lite3.c
@@ -0,0 +1,70 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include "hdf5.h"
+#include "hdf5_hl.h"
+#include <stdlib.h>
+
+#define ATTR_SIZE 5
+
+int main( void )
+{
+ hid_t   file_id;
+ hid_t   dset_id;
+ hid_t   space_id;
+ hsize_t dims[1] = { ATTR_SIZE };
+ int     data[ATTR_SIZE] = {1,2,3,4,5};
+ herr_t  status;
+ int     i;
+
+ /* create a file */
+ file_id = H5Fcreate("ex_lite3.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+ /* create a data space  */
+ space_id = H5Screate_simple(1, dims, NULL);
+
+ /* create a dataset named "dset" */
+ dset_id = H5Dcreate2(file_id, "dset", H5T_NATIVE_INT, space_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+
+ /* close */
+ status = H5Dclose(dset_id);
+ status = H5Sclose(space_id);
+
+/*-------------------------------------------------------------------------
+ * example of H5LTset_attribute_int
+ *-------------------------------------------------------------------------
+ */
+
+ /* create and write the attribute "attr1" on the dataset "dset" */
+ status = H5LTset_attribute_int(file_id, "dset", "attr1", data, ATTR_SIZE);
+
+/*-------------------------------------------------------------------------
+ * example of H5LTget_attribute_int
+ *-------------------------------------------------------------------------
+ */
+
+ /* get the attribute "attr1" from the dataset "dset" */
+ status = H5LTget_attribute_int(file_id, "dset", "attr1", data);
+
+ for(i = 0; i < ATTR_SIZE; i++ )
+  printf("  %d", data[i]);
+ printf("\n");
+
+ /* close file */
+ status = H5Fclose(file_id);
+
+ return 0;
+}
+
diff --git a/privatemodules/nc4/share/hdf5_examples/hl/c/ex_table_01.c b/privatemodules/nc4/share/hdf5_examples/hl/c/ex_table_01.c
new file mode 100644
index 0000000000000000000000000000000000000000..de304d96b6e57ec5a9294a0276eaf4a448c75616
--- /dev/null
+++ b/privatemodules/nc4/share/hdf5_examples/hl/c/ex_table_01.c
@@ -0,0 +1,138 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include "hdf5.h"
+#include "hdf5_hl.h"
+#include <stdlib.h>
+
+/*-------------------------------------------------------------------------
+ * Table API example
+ *
+ * H5TBmake_table
+ * H5TBread_table
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#define NFIELDS  (hsize_t)  5
+#define NRECORDS (hsize_t)  8
+#define TABLE_NAME "table"
+
+
+int main( void )
+{
+ typedef struct Particle
+ {
+  char   name[16];
+  int    lati;
+  int    longi;
+  float  pressure;
+  double temperature;
+ } Particle;
+
+ Particle  dst_buf[NRECORDS];
+
+ /* Calculate the size and the offsets of our struct members in memory */
+ size_t dst_size =  sizeof( Particle );
+ size_t dst_offset[NFIELDS] = { HOFFSET( Particle, name ),
+                                HOFFSET( Particle, lati ),
+                                HOFFSET( Particle, longi ),
+                                HOFFSET( Particle, pressure ),
+                                HOFFSET( Particle, temperature )};
+
+ size_t dst_sizes[NFIELDS] = { sizeof( dst_buf[0].name),
+                               sizeof( dst_buf[0].lati),
+                               sizeof( dst_buf[0].longi),
+                               sizeof( dst_buf[0].pressure),
+                               sizeof( dst_buf[0].temperature)};
+
+
+ /* Define an array of Particles */
+ Particle  p_data[NRECORDS] = {
+ {"zero",0,0, 0.0f, 0.0},
+ {"one",10,10, 1.0f, 10.0},
+ {"two",  20,20, 2.0f, 20.0},
+ {"three",30,30, 3.0f, 30.0},
+ {"four", 40,40, 4.0f, 40.0},
+ {"five", 50,50, 5.0f, 50.0},
+ {"six",  60,60, 6.0f, 60.0},
+ {"seven",70,70, 7.0f, 70.0}
+  };
+
+  /* Define field information */
+  const char *field_names[NFIELDS]  =
+  { "Name","Latitude", "Longitude", "Pressure", "Temperature" };
+  hid_t      field_type[NFIELDS];
+  hid_t      string_type;
+  hid_t      file_id;
+  hsize_t    chunk_size = 10;
+  int        *fill_data = NULL;
+  int        compress  = 0;
+  herr_t     status;
+  int        i;
+
+  /* Initialize field_type */
+  string_type = H5Tcopy( H5T_C_S1 );
+  H5Tset_size( string_type, 16 );
+  field_type[0] = string_type;
+  field_type[1] = H5T_NATIVE_INT;
+  field_type[2] = H5T_NATIVE_INT;
+  field_type[3] = H5T_NATIVE_FLOAT;
+  field_type[4] = H5T_NATIVE_DOUBLE;
+
+  /* Create a new file using default properties. */
+  file_id = H5Fcreate( "ex_table_01.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT );
+
+/*-------------------------------------------------------------------------
+ * H5TBmake_table
+ *-------------------------------------------------------------------------
+ */
+
+ status=H5TBmake_table( "Table Title", file_id, TABLE_NAME,NFIELDS,NRECORDS,
+                         dst_size,field_names, dst_offset, field_type,
+                         chunk_size, fill_data, compress, p_data  );
+
+/*-------------------------------------------------------------------------
+ * H5TBread_table
+ *-------------------------------------------------------------------------
+ */
+
+ status=H5TBread_table( file_id, TABLE_NAME, dst_size, dst_offset, dst_sizes, dst_buf );
+
+ /* print it by rows */
+ for (i=0; i<NRECORDS; i++) {
+  printf ("%-5s %-5d %-5d %-5f %-5f",
+   dst_buf[i].name,
+   dst_buf[i].lati,
+   dst_buf[i].longi,
+   dst_buf[i].pressure,
+   dst_buf[i].temperature);
+  printf ("\n");
+ }
+
+/*-------------------------------------------------------------------------
+ * end
+ *-------------------------------------------------------------------------
+ */
+
+  /* close type */
+ H5Tclose( string_type );
+
+ /* close the file */
+ H5Fclose( file_id );
+
+ return 0;
+}
+
diff --git a/privatemodules/nc4/share/hdf5_examples/hl/c/ex_table_02.c b/privatemodules/nc4/share/hdf5_examples/hl/c/ex_table_02.c
new file mode 100644
index 0000000000000000000000000000000000000000..98e33d3e05701a0c0d70c06c41d8b920db675f81
--- /dev/null
+++ b/privatemodules/nc4/share/hdf5_examples/hl/c/ex_table_02.c
@@ -0,0 +1,132 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include "hdf5.h"
+#include "hdf5_hl.h"
+#include <stdlib.h>
+
+/*-------------------------------------------------------------------------
+ * Table API example
+ *
+ * H5TBappend_records
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#define NFIELDS  (hsize_t)     5
+#define NRECORDS (hsize_t)     8
+#define NRECORDS_ADD (hsize_t) 2
+#define TABLE_NAME             "table"
+
+int main( void )
+{
+ typedef struct Particle
+ {
+  char   name[16];
+  int    lati;
+  int    longi;
+  float  pressure;
+  double temperature;
+ } Particle;
+
+ Particle  dst_buf[NRECORDS+NRECORDS_ADD];
+
+/* Define an array of Particles */
+ Particle  p_data[NRECORDS] = {
+ {"zero",0,0, 0.0f, 0.0},
+ {"one",10,10, 1.0f, 10.0},
+ {"two",  20,20, 2.0f, 20.0},
+ {"three",30,30, 3.0f, 30.0},
+ {"four", 40,40, 4.0f, 40.0},
+ {"five", 50,50, 5.0f, 50.0},
+ {"six",  60,60, 6.0f, 60.0},
+ {"seven",70,70, 7.0f, 70.0}
+  };
+
+ /* Calculate the size and the offsets of our struct members in memory */
+ size_t dst_size =  sizeof( Particle );
+ size_t dst_offset[NFIELDS] = { HOFFSET( Particle, name ),
+                                HOFFSET( Particle, lati ),
+                                HOFFSET( Particle, longi ),
+                                HOFFSET( Particle, pressure ),
+                                HOFFSET( Particle, temperature )};
+
+ size_t dst_sizes[NFIELDS] = { sizeof( p_data[0].name),
+                               sizeof( p_data[0].lati),
+                               sizeof( p_data[0].longi),
+                               sizeof( p_data[0].pressure),
+                               sizeof( p_data[0].temperature)};
+
+ /* Define field information */
+ const char *field_names[NFIELDS] =
+ { "Name","Latitude", "Longitude", "Pressure", "Temperature" };
+ hid_t      field_type[NFIELDS];
+ hid_t      string_type;
+ hid_t      file_id;
+ hsize_t    chunk_size = 10;
+ int        *fill_data = NULL;
+ int        compress  = 0;
+ herr_t     status;
+ int        i;
+
+  /* Append particles */
+ Particle particle_in[ NRECORDS_ADD ] =
+ {{ "eight",80,80, 8.0f, 80.0},
+ {"nine",90,90, 9.0f, 90.0} };
+
+ /* Initialize the field field_type */
+ string_type = H5Tcopy( H5T_C_S1 );
+ H5Tset_size( string_type, 16 );
+ field_type[0] = string_type;
+ field_type[1] = H5T_NATIVE_INT;
+ field_type[2] = H5T_NATIVE_INT;
+ field_type[3] = H5T_NATIVE_FLOAT;
+ field_type[4] = H5T_NATIVE_DOUBLE;
+
+ /* Create a new file using default properties. */
+ file_id = H5Fcreate( "ex_table_02.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT );
+
+ /* make a table */
+ status=H5TBmake_table( "Table Title",file_id,TABLE_NAME,NFIELDS,NRECORDS,
+                        dst_size, field_names, dst_offset, field_type,
+                        chunk_size, fill_data, compress, p_data  );
+
+ /* append two records */
+ status=H5TBappend_records(file_id, TABLE_NAME,NRECORDS_ADD, dst_size, dst_offset, dst_sizes,
+  &particle_in );
+
+ /* read the table */
+ status=H5TBread_table( file_id, TABLE_NAME, dst_size, dst_offset, dst_sizes, dst_buf );
+
+ /* print it by rows */
+ for (i=0; i<NRECORDS+NRECORDS_ADD; i++) {
+  printf ("%-5s %-5d %-5d %-5f %-5f",
+   dst_buf[i].name,
+   dst_buf[i].lati,
+   dst_buf[i].longi,
+   dst_buf[i].pressure,
+   dst_buf[i].temperature);
+  printf ("\n");
+ }
+
+  /* close type */
+ H5Tclose( string_type );
+
+ /* close the file */
+ H5Fclose( file_id );
+
+ return 0;
+}
+
diff --git a/privatemodules/nc4/share/hdf5_examples/hl/c/ex_table_03.c b/privatemodules/nc4/share/hdf5_examples/hl/c/ex_table_03.c
new file mode 100644
index 0000000000000000000000000000000000000000..7315fd3ac687cc1d32f7ca026d1fdedf8341e98c
--- /dev/null
+++ b/privatemodules/nc4/share/hdf5_examples/hl/c/ex_table_03.c
@@ -0,0 +1,139 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+
+#include "hdf5.h"
+#include "hdf5_hl.h"
+#include <stdlib.h>
+
+/*-------------------------------------------------------------------------
+ * Table API example
+ *
+ * H5TBwrite_records
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#define NFIELDS  (hsize_t)       5
+#define NRECORDS (hsize_t)       8
+#define NRECORDS_WRITE (hsize_t) 2
+#define TABLE_NAME               "table"
+
+int main( void )
+{
+ typedef struct Particle
+ {
+  char   name[16];
+  int    lati;
+  int    longi;
+  float  pressure;
+  double temperature;
+ } Particle;
+
+ Particle  dst_buf[NRECORDS];
+
+ /* Calculate the size and the offsets of our struct members in memory */
+ size_t dst_size =  sizeof( Particle );
+ size_t dst_offset[NFIELDS] = { HOFFSET( Particle, name ),
+                                HOFFSET( Particle, lati ),
+                                HOFFSET( Particle, longi ),
+                                HOFFSET( Particle, pressure ),
+                                HOFFSET( Particle, temperature )};
+
+ Particle  p = {"zero",0,0, 0.0f, 0.0};
+ size_t dst_sizes[NFIELDS] = { sizeof( p.name),
+                               sizeof( p.lati),
+                               sizeof( p.longi),
+                               sizeof( p.pressure),
+                               sizeof( p.temperature)};
+
+ /* Define field information */
+ const char *field_names[NFIELDS]  =
+ { "Name","Latitude", "Longitude", "Pressure", "Temperature" };
+ /* Fill value particle */
+ Particle   fill_data[1] =
+	{ {"no data",-1,-1, -99.0f, -99.0} };
+ hid_t      field_type[NFIELDS];
+ hid_t      string_type;
+ hid_t      file_id;
+ hsize_t    chunk_size = 10;
+ hsize_t    start;      /* Record to start reading/writing */
+ hsize_t    nrecords;   /* Number of records to read/write */
+ herr_t     status;
+ int        i;
+
+ /* Define 2 new particles to write */
+ Particle  particle_in[NRECORDS_WRITE] =
+ { {"zero",0,0, 0.0f, 0.0},
+ {"one",10,10, 1.0f, 10.0} };
+
+ /* Initialize the field field_type */
+ string_type = H5Tcopy( H5T_C_S1 );
+ H5Tset_size( string_type, 16 );
+ field_type[0] = string_type;
+ field_type[1] = H5T_NATIVE_INT;
+ field_type[2] = H5T_NATIVE_INT;
+ field_type[3] = H5T_NATIVE_FLOAT;
+ field_type[4] = H5T_NATIVE_DOUBLE;
+
+/* Create a new file using default properties. */
+ file_id = H5Fcreate( "ex_table_03.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT );
+
+ /* Make the table */
+ status=H5TBmake_table( "Table Title",
+  file_id,
+  TABLE_NAME,
+  NFIELDS,
+  NRECORDS,
+  dst_size,
+  field_names,
+  dst_offset,
+  field_type,
+  chunk_size,
+  fill_data,
+  0,           /* no compression */
+  NULL );      /* no data written */
+
+
+ /* Overwrite 2 records starting at record 0 */
+ start    = 0;
+ nrecords = NRECORDS_WRITE;
+ status=H5TBwrite_records( file_id, TABLE_NAME, start, nrecords, dst_size, dst_offset,
+  dst_sizes, particle_in);
+
+ /* read the table */
+ status=H5TBread_table( file_id, TABLE_NAME, dst_size, dst_offset, dst_sizes, dst_buf );
+
+ /* print it by rows */
+ for (i=0; i<NRECORDS; i++) {
+  printf ("%-5s %-5d %-5d %-5f %-5f",
+   dst_buf[i].name,
+   dst_buf[i].lati,
+   dst_buf[i].longi,
+   dst_buf[i].pressure,
+   dst_buf[i].temperature);
+  printf ("\n");
+ }
+
+  /* close type */
+ H5Tclose( string_type );
+
+ /* close the file */
+ H5Fclose( file_id );
+
+ return 0;
+
+}
+
diff --git a/privatemodules/nc4/share/hdf5_examples/hl/c/ex_table_04.c b/privatemodules/nc4/share/hdf5_examples/hl/c/ex_table_04.c
new file mode 100644
index 0000000000000000000000000000000000000000..0a01116e9d173ad34334d27852831ceadb70f9b6
--- /dev/null
+++ b/privatemodules/nc4/share/hdf5_examples/hl/c/ex_table_04.c
@@ -0,0 +1,166 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include "hdf5.h"
+#include "hdf5_hl.h"
+#include <stdlib.h>
+
+/*-------------------------------------------------------------------------
+ * Table API example
+ *
+ * H5TBwrite_fields_name
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#define NFIELDS       (hsize_t)   5
+#define NRECORDS      (hsize_t)   8
+#define NRECORDS_ADD  (hsize_t)   3
+#define TABLE_NAME               "table"
+
+int main( void )
+{
+ typedef struct Particle
+ {
+  char   name[16];
+  int    lati;
+  int    longi;
+  float  pressure;
+  double temperature;
+ } Particle;
+
+ /* Define a subset of Particle, with latitude and longitude fields */
+ typedef struct Position
+ {
+  int    lati;
+  int    longi;
+ } Position;
+
+ /* Define a subset of Particle, with name and pressure fields */
+ typedef struct NamePressure
+ {
+  char   name[16];
+  float  pressure;
+ } NamePressure;
+
+ Particle  dst_buf[NRECORDS];
+ /* Calculate the size and the offsets of our struct members in memory */
+ size_t dst_size =  sizeof( Particle );
+ size_t dst_offset[NFIELDS] = { HOFFSET( Particle, name ),
+                                HOFFSET( Particle, lati ),
+                                HOFFSET( Particle, longi ),
+                                HOFFSET( Particle, pressure ),
+                                HOFFSET( Particle, temperature )};
+ size_t dst_sizes[NFIELDS] = { sizeof( dst_buf[0].name),
+                               sizeof( dst_buf[0].lati),
+                               sizeof( dst_buf[0].longi),
+                               sizeof( dst_buf[0].pressure),
+                               sizeof( dst_buf[0].temperature)};
+ size_t field_offset_pos[2] = { HOFFSET( Position, lati ),
+                                HOFFSET( Position, longi )};
+ const char *field_names[NFIELDS]  =     /* Define field information */
+ { "Name","Latitude", "Longitude", "Pressure", "Temperature" };
+ hid_t      field_type[NFIELDS];
+ hid_t      string_type;
+ hid_t      file_id;
+ hsize_t    chunk_size = 10;
+ Particle   fill_data[1] =
+ { {"no data",-1,-1, -99.0f, -99.0} };   /* Fill value particle */
+ hsize_t    start;                       /* Record to start reading/writing */
+ hsize_t    nrecords;                    /* Number of records to read/write */
+ int        compress  = 0;
+ herr_t     status;
+ int        i;
+ Particle  *p_data = NULL;               /* Initially no data */
+ float      pressure_in [NRECORDS_ADD] = /* Define new values for the field "Pressure"  */
+ { 0.0f,1.0f,2.0f};
+ Position   position_in[NRECORDS_ADD] = {/* Define new values for "Latitude,Longitude"  */
+ {0,0},
+ {10,10},
+ {20,20}};
+ NamePressure   namepre_in[NRECORDS_ADD] =/* Define new values for "Name,Pressure"  */
+ { {"zero",0.0f},
+ {"one",   1.0f},
+ {"two",   2.0f},
+ };
+ size_t field_sizes_pos[2]=
+ {
+  sizeof(position_in[0].longi),
+  sizeof(position_in[0].lati)
+ };
+ size_t field_sizes_pre[1]=
+ {
+  sizeof(namepre_in[0].pressure)
+ };
+
+ /* Initialize the field field_type */
+ string_type = H5Tcopy( H5T_C_S1 );
+ H5Tset_size( string_type, 16 );
+ field_type[0] = string_type;
+ field_type[1] = H5T_NATIVE_INT;
+ field_type[2] = H5T_NATIVE_INT;
+ field_type[3] = H5T_NATIVE_FLOAT;
+ field_type[4] = H5T_NATIVE_DOUBLE;
+
+ /* Create a new file using default properties. */
+ file_id = H5Fcreate( "ex_table_04.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT );
+
+ /* Make the table */
+ status=H5TBmake_table( "Table Title",file_id,TABLE_NAME,NFIELDS,NRECORDS,
+                         dst_size,field_names, dst_offset, field_type,
+                         chunk_size, fill_data, compress, p_data  );
+
+ /* Write the pressure field starting at record 2 */
+ start    = 2;
+ nrecords = NRECORDS_ADD;
+ status=H5TBwrite_fields_name( file_id, TABLE_NAME, "Pressure", start, nrecords,
+   sizeof( float ), 0, field_sizes_pre, pressure_in  );
+
+ /* Write the new longitude and latitude information starting at record 2 */
+ start    = 2;
+ nrecords = NRECORDS_ADD;
+ status=H5TBwrite_fields_name( file_id, TABLE_NAME, "Latitude,Longitude", start, nrecords,
+   sizeof( Position ), field_offset_pos, field_sizes_pos,  position_in  );
+
+ /* read the table */
+ status=H5TBread_table( file_id, TABLE_NAME, dst_size, dst_offset, dst_sizes, dst_buf );
+
+ /* print it by rows */
+ for (i=0; i<NRECORDS; i++) {
+  printf ("%-5s %-5d %-5d %-5f %-5f",
+   dst_buf[i].name,
+   dst_buf[i].lati,
+   dst_buf[i].longi,
+   dst_buf[i].pressure,
+   dst_buf[i].temperature);
+  printf ("\n");
+ }
+
+/*-------------------------------------------------------------------------
+ * end
+ *-------------------------------------------------------------------------
+ */
+
+  /* close type */
+ H5Tclose( string_type );
+
+ /* close the file */
+ H5Fclose( file_id );
+
+ return 0;
+
+
+}
+
diff --git a/privatemodules/nc4/share/hdf5_examples/hl/c/ex_table_05.c b/privatemodules/nc4/share/hdf5_examples/hl/c/ex_table_05.c
new file mode 100644
index 0000000000000000000000000000000000000000..f0c96ebf4ca2f5fbb389fae2f43837765c8e9a52
--- /dev/null
+++ b/privatemodules/nc4/share/hdf5_examples/hl/c/ex_table_05.c
@@ -0,0 +1,176 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+
+#include "hdf5.h"
+#include "hdf5_hl.h"
+#include <stdlib.h>
+
+/*-------------------------------------------------------------------------
+ * Table API example
+ *
+ * H5TBwrite_fields_index
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#define NFIELDS       (hsize_t)   5
+#define NRECORDS      (hsize_t)   8
+#define NRECORDS_ADD  (hsize_t)   3
+#define TABLE_NAME               "table"
+
+
+
+int main( void )
+{
+ typedef struct Particle
+ {
+  char   name[16];
+  int    lati;
+  int    longi;
+  float  pressure;
+  double temperature;
+ } Particle;
+
+ /* Define a subset of Particle, with latitude and longitude fields */
+ typedef struct Position
+ {
+  int    lati;
+  int    longi;
+ } Position;
+
+ /* Define a subset of Particle, with name and pressure fields */
+ typedef struct NamePressure
+ {
+  char   name[16];
+  float  pressure;
+ } NamePressure;
+
+ /* Calculate the type_size and the offsets of our struct members */
+ Particle  dst_buf[NRECORDS];
+ size_t dst_size =  sizeof( Particle );
+ size_t dst_offset[NFIELDS] = { HOFFSET( Particle, name ),
+                                HOFFSET( Particle, lati ),
+                                HOFFSET( Particle, longi ),
+                                HOFFSET( Particle, pressure ),
+                                HOFFSET( Particle, temperature )};
+ size_t dst_sizes[NFIELDS] = { sizeof( dst_buf[0].name),
+                               sizeof( dst_buf[0].lati),
+                               sizeof( dst_buf[0].longi),
+                               sizeof( dst_buf[0].pressure),
+                               sizeof( dst_buf[0].temperature)};
+
+ size_t field_offset_pos[2] = { HOFFSET( Position, lati ),
+                                HOFFSET( Position, longi )};
+
+ /* Initially no data */
+ Particle  *p_data = NULL;
+
+ /* Define field information */
+ const char *field_names[NFIELDS]  =
+ { "Name","Latitude", "Longitude", "Pressure", "Temperature" };
+ hid_t      field_type[NFIELDS];
+ hid_t      string_type;
+ hid_t      file_id;
+ hsize_t    chunk_size = 10;
+  Particle   fill_data[1] =
+ { {"no data",-1,-1, -99.0f, -99.0} };   /* Fill value particle */
+ int        compress  = 0;
+ hsize_t    nfields;
+ hsize_t    start;                       /* Record to start reading/writing */
+ hsize_t    nrecords;                    /* Number of records to read/write */
+ herr_t     status;
+ int        i;
+
+ /* Define new values for the field "Pressure"  */
+ float      pressure_in  [NRECORDS_ADD] =
+ { 0.0f,1.0f,2.0f};
+ int        field_index_pre[1]     = { 3 };
+ int        field_index_pos[2]     = { 1,2 };
+
+ /* Define new values for the fields "Latitude,Longitude"  */
+ Position   position_in[NRECORDS_ADD] = { {0,0},
+ {10,10},
+ {20,20} };
+
+ size_t field_sizes_pos[2]=
+ {
+  sizeof(position_in[0].longi),
+  sizeof(position_in[0].lati)
+ };
+
+ size_t field_sizes_pre[1]=
+ {
+  sizeof(float)
+ };
+
+ /* Initialize the field field_type */
+ string_type = H5Tcopy( H5T_C_S1 );
+ H5Tset_size( string_type, 16 );
+ field_type[0] = string_type;
+ field_type[1] = H5T_NATIVE_INT;
+ field_type[2] = H5T_NATIVE_INT;
+ field_type[3] = H5T_NATIVE_FLOAT;
+ field_type[4] = H5T_NATIVE_DOUBLE;
+
+ /* Create a new file using default properties. */
+ file_id = H5Fcreate( "ex_table_05.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT );
+
+ /* Make the table */
+ status=H5TBmake_table( "Table Title", file_id, TABLE_NAME,NFIELDS,NRECORDS,
+                         dst_size,field_names, dst_offset, field_type,
+                         chunk_size, fill_data, compress, p_data  );
+
+ /* Write the pressure field starting at record 2 */
+ nfields  = 1;
+ start    = 2;
+ nrecords = NRECORDS_ADD;
+ status=H5TBwrite_fields_index( file_id, TABLE_NAME, nfields, field_index_pre, start, nrecords,
+   sizeof( float ), 0, field_sizes_pre, pressure_in  );
+
+
+ /* Write the new longitude and latitude information starting at record 2  */
+ nfields  = 2;
+ start    = 2;
+ nrecords = NRECORDS_ADD;
+ status=H5TBwrite_fields_index( file_id, TABLE_NAME, nfields, field_index_pos, start, nrecords,
+   sizeof( Position ), field_offset_pos, field_sizes_pos, position_in  );
+
+
+ /* read the table */
+ status=H5TBread_table( file_id, TABLE_NAME, dst_size, dst_offset, dst_sizes, dst_buf );
+
+ /* print it by rows */
+ for (i=0; i<NRECORDS; i++) {
+  printf ("%-5s %-5d %-5d %-5f %-5f",
+   dst_buf[i].name,
+   dst_buf[i].lati,
+   dst_buf[i].longi,
+   dst_buf[i].pressure,
+   dst_buf[i].temperature);
+  printf ("\n");
+ }
+
+
+  /* close type */
+ H5Tclose( string_type );
+
+ /* close the file */
+ H5Fclose( file_id );
+
+ return 0;
+
+}
+
diff --git a/privatemodules/nc4/share/hdf5_examples/hl/c/ex_table_06.c b/privatemodules/nc4/share/hdf5_examples/hl/c/ex_table_06.c
new file mode 100644
index 0000000000000000000000000000000000000000..261b23c772e00eac2bec208371af37ea531d7bb9
--- /dev/null
+++ b/privatemodules/nc4/share/hdf5_examples/hl/c/ex_table_06.c
@@ -0,0 +1,98 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include "hdf5.h"
+#include "hdf5_hl.h"
+#include <stdlib.h>
+
+/*-------------------------------------------------------------------------
+ * Table API example
+ *
+ * H5TBget_table_info
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#define NFIELDS  (hsize_t)  5
+#define NRECORDS (hsize_t)  8
+#define TABLE_NAME "table"
+
+int main( void )
+{
+ typedef struct Particle
+ {
+  char   name[16];
+  int    lati;
+  int    longi;
+  float  pressure;
+  double temperature;
+ } Particle;
+
+ /* Calculate the size and the offsets of our struct members in memory */
+ size_t dst_size =  sizeof( Particle );
+ size_t dst_offset[NFIELDS] = { HOFFSET( Particle, name ),
+                                HOFFSET( Particle, lati ),
+                                HOFFSET( Particle, longi ),
+                                HOFFSET( Particle, pressure ),
+                                HOFFSET( Particle, temperature )};
+
+  /* Define field information */
+  const char *field_names[NFIELDS]  =
+  { "Name","Latitude", "Longitude", "Pressure", "Temperature" };
+  hid_t      field_type[NFIELDS];
+  hid_t      string_type;
+  hid_t      file_id;
+  hsize_t    chunk_size = 10;
+  Particle   fill_data[1] =
+  { {"no data",-1,-1, -99.0f, -99.0} };   /* Fill value particle */
+  int        compress  = 0;
+  hsize_t    nfields_out;
+  hsize_t    nrecords_out;
+  herr_t     status;
+
+  /* Initialize field_type */
+  string_type = H5Tcopy( H5T_C_S1 );
+  H5Tset_size( string_type, 16 );
+  field_type[0] = string_type;
+  field_type[1] = H5T_NATIVE_INT;
+  field_type[2] = H5T_NATIVE_INT;
+  field_type[3] = H5T_NATIVE_FLOAT;
+  field_type[4] = H5T_NATIVE_DOUBLE;
+
+ /* Create a new file using default properties. */
+ file_id = H5Fcreate( "ex_table_06.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT );
+
+ /* Make a table */
+ status=H5TBmake_table( "Table Title",file_id,TABLE_NAME,NFIELDS,NRECORDS,dst_size,
+                       field_names, dst_offset, field_type,
+                       chunk_size, fill_data, compress, NULL);
+
+ /* Get table info  */
+ status=H5TBget_table_info (file_id,TABLE_NAME, &nfields_out, &nrecords_out );
+
+ /* print */
+ printf ("Table has %d fields and %d records\n",(int)nfields_out,(int)nrecords_out);
+
+  /* close type */
+ H5Tclose( string_type );
+
+ /* close the file */
+ H5Fclose( file_id );
+
+ return 0;
+
+
+}
+
diff --git a/privatemodules/nc4/share/hdf5_examples/hl/c/ex_table_07.c b/privatemodules/nc4/share/hdf5_examples/hl/c/ex_table_07.c
new file mode 100644
index 0000000000000000000000000000000000000000..3479aa81db7f61a7b6a5502e35e29bc9c7b5e625
--- /dev/null
+++ b/privatemodules/nc4/share/hdf5_examples/hl/c/ex_table_07.c
@@ -0,0 +1,115 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include "hdf5.h"
+#include "hdf5_hl.h"
+#include <stdlib.h>
+
+/*-------------------------------------------------------------------------
+ * Table API example
+ *
+ * H5TBdelete_record
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#define NFIELDS  (hsize_t)  5
+#define NRECORDS (hsize_t)  8
+#define TABLE_NAME          "table"
+
+int main( void )
+{
+ typedef struct Particle
+ {
+  char   name[16];
+  int    lati;
+  int    longi;
+  float  pressure;
+  double temperature;
+ } Particle;
+
+ /* Calculate the size and the offsets of our struct members in memory */
+ size_t dst_size =  sizeof( Particle );
+ size_t dst_offset[NFIELDS] = { HOFFSET( Particle, name ),
+                                HOFFSET( Particle, lati ),
+                                HOFFSET( Particle, longi ),
+                                HOFFSET( Particle, pressure ),
+                                HOFFSET( Particle, temperature )};
+
+ /* Define an array of Particles */
+ Particle  p_data[NRECORDS] = {
+ {"zero",0,0, 0.0f, 0.0},
+ {"one",10,10, 1.0f, 10.0},
+ {"two",  20,20, 2.0f, 20.0},
+ {"three",30,30, 3.0f, 30.0},
+ {"four", 40,40, 4.0f, 40.0},
+ {"five", 50,50, 5.0f, 50.0},
+ {"six",  60,60, 6.0f, 60.0},
+ {"seven",70,70, 7.0f, 70.0}
+  };
+
+ const char *field_names[NFIELDS]  =     /* Define field information */
+ { "Name","Latitude", "Longitude", "Pressure", "Temperature" };
+ hid_t      field_type[NFIELDS];
+ hid_t      string_type;
+ hid_t      file_id;
+ hsize_t    chunk_size = 10;
+ int        compress  = 0;
+ Particle   fill_data[1] =
+ { {"no data",-1,-1, -99.0f, -99.0} };
+ hsize_t    start;                      /* Record to start reading */
+ hsize_t    nrecords;                   /* Number of records to insert/delete */
+ hsize_t    nfields_out;
+ hsize_t    nrecords_out;
+ herr_t     status;
+
+ /* Initialize the field field_type */
+ string_type = H5Tcopy( H5T_C_S1 );
+ H5Tset_size( string_type, 16 );
+ field_type[0] = string_type;
+ field_type[1] = H5T_NATIVE_INT;
+ field_type[2] = H5T_NATIVE_INT;
+ field_type[3] = H5T_NATIVE_FLOAT;
+ field_type[4] = H5T_NATIVE_DOUBLE;
+
+ /* Create a new file using default properties. */
+ file_id = H5Fcreate( "ex_table_07.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT );
+
+ /* Make the table */
+ status=H5TBmake_table( "Table Title",file_id,TABLE_NAME,NFIELDS,NRECORDS,
+  dst_size,field_names, dst_offset, field_type,
+  chunk_size, fill_data, compress, p_data  );
+
+ /* Delete records  */
+ start    = 3;
+ nrecords = 3;
+ status=H5TBdelete_record( file_id, TABLE_NAME, start, nrecords );
+
+  /* Get table info  */
+ status=H5TBget_table_info (file_id,TABLE_NAME, &nfields_out, &nrecords_out );
+
+ /* print */
+ printf ("Table has %d fields and %d records\n",(int)nfields_out,(int)nrecords_out);
+
+  /* close type */
+ H5Tclose( string_type );
+
+ /* close the file */
+ H5Fclose( file_id );
+
+ return 0;
+
+}
+
diff --git a/privatemodules/nc4/share/hdf5_examples/hl/c/ex_table_08.c b/privatemodules/nc4/share/hdf5_examples/hl/c/ex_table_08.c
new file mode 100644
index 0000000000000000000000000000000000000000..4078beafeb65b88d7326c9d7dc184241012dcb50
--- /dev/null
+++ b/privatemodules/nc4/share/hdf5_examples/hl/c/ex_table_08.c
@@ -0,0 +1,146 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include "hdf5.h"
+#include "hdf5_hl.h"
+#include <stdlib.h>
+
+/*-------------------------------------------------------------------------
+ * Table API example
+ *
+ * H5TBinsert_record
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#define NFIELDS      (hsize_t)  5
+#define NRECORDS     (hsize_t)  8
+#define NRECORDS_INS (hsize_t)  2
+#define TABLE_NAME              "table"
+
+int main( void )
+{
+ typedef struct Particle
+ {
+  char   name[16];
+  int    lati;
+  int    longi;
+  float  pressure;
+  double temperature;
+ } Particle;
+
+ Particle  dst_buf[ NRECORDS + NRECORDS_INS ];
+
+  /* Define an array of Particles */
+ Particle  p_data[NRECORDS] = {
+ {"zero",0,0, 0.0f, 0.0},
+ {"one",10,10, 1.0f, 10.0},
+ {"two",  20,20, 2.0f, 20.0},
+ {"three",30,30, 3.0f, 30.0},
+ {"four", 40,40, 4.0f, 40.0},
+ {"five", 50,50, 5.0f, 50.0},
+ {"six",  60,60, 6.0f, 60.0},
+ {"seven",70,70, 7.0f, 70.0}
+  };
+
+ /* Calculate the size and the offsets of our struct members in memory */
+ size_t dst_size =  sizeof( Particle );
+ size_t dst_offset[NFIELDS] = { HOFFSET( Particle, name ),
+                                HOFFSET( Particle, lati ),
+                                HOFFSET( Particle, longi ),
+                                HOFFSET( Particle, pressure ),
+                                HOFFSET( Particle, temperature )};
+ size_t dst_sizes[NFIELDS] = { sizeof( p_data[0].name),
+                               sizeof( p_data[0].lati),
+                               sizeof( p_data[0].longi),
+                               sizeof( p_data[0].pressure),
+                               sizeof( p_data[0].temperature)};
+
+ /* Define an array of Particles to insert */
+ Particle  p_data_insert[NRECORDS_INS] =
+ { {"new",30,30, 3.0f, 30.0},
+ {"new",40,40, 4.0f, 40.0}
+ };
+
+ /* Define field information */
+ const char *field_names[NFIELDS]  =
+ { "Name","Latitude", "Longitude", "Pressure", "Temperature" };
+ hid_t      field_type[NFIELDS];
+ hid_t      string_type;
+ hid_t      file_id;
+ hsize_t    chunk_size = 10;
+ int        compress  = 0;
+ int        *fill_data = NULL;
+ hsize_t    start;      /* Record to start reading */
+ hsize_t    nrecords;   /* Number of records to insert/delete */
+ herr_t     status;
+ hsize_t    nfields_out;
+ hsize_t    nrecords_out;
+ int        i;
+
+ /* Initialize the field field_type */
+ string_type = H5Tcopy( H5T_C_S1 );
+ H5Tset_size( string_type, 16 );
+ field_type[0] = string_type;
+ field_type[1] = H5T_NATIVE_INT;
+ field_type[2] = H5T_NATIVE_INT;
+ field_type[3] = H5T_NATIVE_FLOAT;
+ field_type[4] = H5T_NATIVE_DOUBLE;
+
+ /* Create a new file using default properties. */
+ file_id = H5Fcreate( "ex_table_08.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT );
+
+ /* Make the table */
+ status=H5TBmake_table( "Table Title",file_id,TABLE_NAME,NFIELDS,NRECORDS,
+                         dst_size,field_names, dst_offset, field_type,
+                         chunk_size, fill_data, compress, p_data  );
+
+ /* Insert records */
+ start    = 3;
+ nrecords = NRECORDS_INS;
+ status=H5TBinsert_record( file_id, TABLE_NAME, start, nrecords, dst_size, dst_offset,
+  dst_sizes, p_data_insert );
+
+ /* read the table */
+ status=H5TBread_table( file_id, TABLE_NAME, dst_size, dst_offset, dst_sizes, dst_buf );
+
+ /* get table info  */
+ status=H5TBget_table_info(file_id,TABLE_NAME, &nfields_out, &nrecords_out );
+
+ /* print */
+ printf ("Table has %d fields and %d records\n",(int)nfields_out,(int)nrecords_out);
+
+ /* print it by rows */
+ for (i=0; i<nrecords_out; i++) {
+  printf ("%-5s %-5d %-5d %-5f %-5f",
+   dst_buf[i].name,
+   dst_buf[i].lati,
+   dst_buf[i].longi,
+   dst_buf[i].pressure,
+   dst_buf[i].temperature);
+  printf ("\n");
+ }
+
+
+  /* close type */
+ H5Tclose( string_type );
+
+ /* close the file */
+ H5Fclose( file_id );
+
+ return 0;
+
+}
+
diff --git a/privatemodules/nc4/share/hdf5_examples/hl/c/ex_table_09.c b/privatemodules/nc4/share/hdf5_examples/hl/c/ex_table_09.c
new file mode 100644
index 0000000000000000000000000000000000000000..7ba0aa1493c6e72473a44f6abf8c85e6bc85f933
--- /dev/null
+++ b/privatemodules/nc4/share/hdf5_examples/hl/c/ex_table_09.c
@@ -0,0 +1,146 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include "hdf5.h"
+#include "hdf5_hl.h"
+#include <stdlib.h>
+
+/*-------------------------------------------------------------------------
+ * Table API example
+ *
+ * H5TBadd_records_from
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#define NFIELDS      (hsize_t)  5
+#define NRECORDS     (hsize_t)  8
+#define NRECORDS_INS (hsize_t)  2
+#define TABLE1_NAME             "table1"
+#define TABLE2_NAME             "table2"
+
+int main( void )
+{
+ typedef struct Particle
+ {
+  char   name[16];
+  int    lati;
+  int    longi;
+  float  pressure;
+  double temperature;
+ } Particle;
+
+ Particle  dst_buf[ NRECORDS + NRECORDS_INS ];
+
+ /* Calculate the size and the offsets of our struct members in memory */
+ size_t dst_size =  sizeof( Particle );
+ size_t dst_offset[NFIELDS] = { HOFFSET( Particle, name ),
+                                HOFFSET( Particle, lati ),
+                                HOFFSET( Particle, longi ),
+                                HOFFSET( Particle, pressure ),
+                                HOFFSET( Particle, temperature )};
+ size_t dst_sizes[NFIELDS] = { sizeof( dst_buf[0].name),
+                               sizeof( dst_buf[0].lati),
+                               sizeof( dst_buf[0].longi),
+                               sizeof( dst_buf[0].pressure),
+                               sizeof( dst_buf[0].temperature)};
+
+ /* Define an array of Particles */
+ Particle  p_data[NRECORDS] = {
+ {"zero",0,0, 0.0f, 0.0},
+ {"one",10,10, 1.0f, 10.0},
+ {"two",  20,20, 2.0f, 20.0},
+ {"three",30,30, 3.0f, 30.0},
+ {"four", 40,40, 4.0f, 40.0},
+ {"five", 50,50, 5.0f, 50.0},
+ {"six",  60,60, 6.0f, 60.0},
+ {"seven",70,70, 7.0f, 70.0}
+  };
+
+ /* Define field information */
+ const char *field_names[NFIELDS]  =
+ { "Name","Latitude", "Longitude", "Pressure", "Temperature" };
+ hid_t      field_type[NFIELDS];
+ hid_t      string_type;
+ hid_t      file_id;
+ hsize_t    chunk_size = 10;
+ int        compress  = 0;
+ Particle   fill_data[1] =
+ { {"no data",-1,-1, -99.0f, -99.0} };   /* Fill value particle */
+ hsize_t    start1;                      /* Record to start reading from 1st table */
+ hsize_t    nrecords;                    /* Number of records to insert */
+ hsize_t    start2;                      /* Record to start writing in 2nd table */
+ herr_t     status;
+ int        i;
+ hsize_t    nfields_out;
+ hsize_t    nrecords_out;
+
+ /* Initialize the field field_type */
+ string_type = H5Tcopy( H5T_C_S1 );
+ H5Tset_size( string_type, 16 );
+ field_type[0] = string_type;
+ field_type[1] = H5T_NATIVE_INT;
+ field_type[2] = H5T_NATIVE_INT;
+ field_type[3] = H5T_NATIVE_FLOAT;
+ field_type[4] = H5T_NATIVE_DOUBLE;
+
+ /* Create a new file using default properties. */
+ file_id = H5Fcreate( "ex_table_09.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT );
+
+ /* Make 2 tables: TABLE2_NAME is empty  */
+ status=H5TBmake_table( "Table Title",file_id,TABLE1_NAME,NFIELDS,NRECORDS,
+                         dst_size,field_names, dst_offset, field_type,
+                         chunk_size, fill_data, compress, p_data  );
+
+ status=H5TBmake_table( "Table Title",file_id,TABLE2_NAME,NFIELDS,NRECORDS,
+                         dst_size,field_names, dst_offset, field_type,
+                         chunk_size, fill_data, compress, NULL  );
+
+
+ /* Add 2 records from TABLE1_NAME to TABLE2_NAME  */
+ start1    = 3;
+ nrecords  = NRECORDS_INS;
+ start2    = 6;
+ status=H5TBadd_records_from( file_id, TABLE1_NAME, start1, nrecords, TABLE2_NAME, start2 );
+
+ /* read TABLE2_NAME: it should have 2 more records now */
+ status=H5TBread_table( file_id, TABLE2_NAME, dst_size, dst_offset, dst_sizes, dst_buf );
+
+ /* Get table info  */
+ status=H5TBget_table_info (file_id,TABLE2_NAME, &nfields_out, &nrecords_out );
+
+ /* print */
+ printf ("Table has %d fields and %d records\n",(int)nfields_out,(int)nrecords_out);
+
+ /* print it by rows */
+ for (i=0; i<nrecords_out; i++) {
+  printf ("%-5s %-5d %-5d %-5f %-5f",
+   dst_buf[i].name,
+   dst_buf[i].lati,
+   dst_buf[i].longi,
+   dst_buf[i].pressure,
+   dst_buf[i].temperature);
+  printf ("\n");
+ }
+
+  /* close type */
+ H5Tclose( string_type );
+
+ /* close the file */
+ H5Fclose( file_id );
+
+ return 0;
+}
+
diff --git a/privatemodules/nc4/share/hdf5_examples/hl/c/ex_table_10.c b/privatemodules/nc4/share/hdf5_examples/hl/c/ex_table_10.c
new file mode 100644
index 0000000000000000000000000000000000000000..20543c2bd408f986526102c29be0ffb791934ddc
--- /dev/null
+++ b/privatemodules/nc4/share/hdf5_examples/hl/c/ex_table_10.c
@@ -0,0 +1,139 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include "hdf5.h"
+#include "hdf5_hl.h"
+#include <stdlib.h>
+
+/*-------------------------------------------------------------------------
+ * Table API example
+ *
+ * H5TBcombine_tables
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#define NFIELDS  (hsize_t)  5
+#define NRECORDS (hsize_t)  8
+#define TABLE1_NAME         "table1"
+#define TABLE2_NAME         "table2"
+#define TABLE3_NAME         "table3"
+
+int main( void )
+{
+ typedef struct Particle
+ {
+  char   name[16];
+  int    lati;
+  int    longi;
+  float  pressure;
+  double temperature;
+ } Particle;
+
+ /* Define an array of Particles */
+ Particle  p_data[NRECORDS] = {
+ {"zero",0,0, 0.0f, 0.0},
+ {"one",10,10, 1.0f, 10.0},
+ {"two",  20,20, 2.0f, 20.0},
+ {"three",30,30, 3.0f, 30.0},
+ {"four", 40,40, 4.0f, 40.0},
+ {"five", 50,50, 5.0f, 50.0},
+ {"six",  60,60, 6.0f, 60.0},
+ {"seven",70,70, 7.0f, 70.0}
+  };
+
+ Particle  dst_buf[ 2 * NRECORDS ];
+ /* Calculate the size and the offsets of our struct members in memory */
+ size_t dst_size =  sizeof( Particle );
+ size_t dst_offset[NFIELDS] = { HOFFSET( Particle, name ),
+                                HOFFSET( Particle, lati ),
+                                HOFFSET( Particle, longi ),
+                                HOFFSET( Particle, pressure ),
+                                HOFFSET( Particle, temperature )};
+ size_t dst_sizes[NFIELDS] = { sizeof( dst_buf[0].name),
+                               sizeof( dst_buf[0].lati),
+                               sizeof( dst_buf[0].longi),
+                               sizeof( dst_buf[0].pressure),
+                               sizeof( dst_buf[0].temperature)};
+
+
+ /* Define field information */
+ const char *field_names[NFIELDS]  =
+ { "Name","Latitude", "Longitude", "Pressure", "Temperature" };
+ hid_t      field_type[NFIELDS];
+ hid_t      string_type;
+ hid_t      file_id;
+ hsize_t    chunk_size = 10;
+ int        compress  = 0;
+ int        *fill_data = NULL;
+ herr_t     status;
+ hsize_t    nfields_out;
+ hsize_t    nrecords_out;
+ int        i;
+
+ /* Initialize the field field_type */
+ string_type = H5Tcopy( H5T_C_S1 );
+ H5Tset_size( string_type, 16 );
+ field_type[0] = string_type;
+ field_type[1] = H5T_NATIVE_INT;
+ field_type[2] = H5T_NATIVE_INT;
+ field_type[3] = H5T_NATIVE_FLOAT;
+ field_type[4] = H5T_NATIVE_DOUBLE;
+
+ /* Create a new file using default properties. */
+ file_id = H5Fcreate( "ex_table_10.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT );
+
+ /* Make two tables */
+ status=H5TBmake_table( "Table Title",file_id,TABLE1_NAME,NFIELDS,NRECORDS,
+                         dst_size,field_names, dst_offset, field_type,
+                         chunk_size, fill_data, compress, p_data  );
+
+ status=H5TBmake_table( "Table Title",file_id,TABLE2_NAME,NFIELDS,NRECORDS,
+                         dst_size,field_names, dst_offset, field_type,
+                         chunk_size, fill_data, compress, p_data  );
+
+ /* Combine the two tables into a third in the same file  */
+ status=H5TBcombine_tables( file_id, TABLE1_NAME, file_id, TABLE2_NAME, TABLE3_NAME );
+
+ /* read the combined table */
+ status=H5TBread_table( file_id, TABLE3_NAME, dst_size, dst_offset, dst_sizes, dst_buf );
+
+ /* Get table info  */
+ status=H5TBget_table_info (file_id,TABLE3_NAME, &nfields_out, &nrecords_out );
+
+ /* print */
+ printf ("Table has %d fields and %d records\n",(int)nfields_out,(int)nrecords_out);
+
+ /* print it by rows */
+ for (i=0; i<nrecords_out; i++) {
+  printf ("%-5s %-5d %-5d %-5f %-5f",
+   dst_buf[i].name,
+   dst_buf[i].lati,
+   dst_buf[i].longi,
+   dst_buf[i].pressure,
+   dst_buf[i].temperature);
+  printf ("\n");
+ }
+
+  /* close type */
+ H5Tclose( string_type );
+
+ /* close the file */
+ H5Fclose( file_id );
+
+ return 0;
+
+}
+
diff --git a/privatemodules/nc4/share/hdf5_examples/hl/c/ex_table_11.c b/privatemodules/nc4/share/hdf5_examples/hl/c/ex_table_11.c
new file mode 100644
index 0000000000000000000000000000000000000000..872fa4e4909c582545ce218054145d6a00f70266
--- /dev/null
+++ b/privatemodules/nc4/share/hdf5_examples/hl/c/ex_table_11.c
@@ -0,0 +1,120 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include "hdf5.h"
+#include "hdf5_hl.h"
+#include <stdlib.h>
+
+/*-------------------------------------------------------------------------
+ * Table API example
+ *
+ * H5TBinsert_field
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#define NFIELDS  (hsize_t)  5
+#define NRECORDS (hsize_t)  8
+#define TABLE_NAME          "table"
+
+int main( void )
+{
+ typedef struct Particle1
+ {
+  char   name[16];
+  int    lati;
+  int    longi;
+  float  pressure;
+  double temperature;
+ } Particle1;
+
+/* Define an array of Particles */
+ Particle1  p_data[NRECORDS] = {
+ {"zero",0,0, 0.0f, 0.0},
+ {"one",10,10, 1.0f, 10.0},
+ {"two",  20,20, 2.0f, 20.0},
+ {"three",30,30, 3.0f, 30.0},
+ {"four", 40,40, 4.0f, 40.0},
+ {"five", 50,50, 5.0f, 50.0},
+ {"six",  60,60, 6.0f, 60.0},
+ {"seven",70,70, 7.0f, 70.0}
+  };
+
+ /* Calculate the size and the offsets of our struct members in memory */
+ size_t dst_size1 =  sizeof( Particle1 );
+ size_t dst_offset1[NFIELDS] = { HOFFSET( Particle1, name ),
+  HOFFSET( Particle1, lati ),
+  HOFFSET( Particle1, longi ),
+  HOFFSET( Particle1, pressure ),
+  HOFFSET( Particle1, temperature )};
+
+ /* Define field information */
+ const char *field_names[NFIELDS]  =
+ { "Name","Latitude", "Longitude", "Pressure", "Temperature" };
+ hid_t      field_type[NFIELDS];
+ hid_t      string_type;
+ hid_t      file_id;
+ hsize_t    chunk_size = 10;
+ int        compress  = 0;
+ Particle1  fill_data[1] = { "no data",-1,-1, -99.0f, -99.0 };
+ int        fill_data_new[1] = { -100 };
+ hsize_t    position;
+ herr_t     status;
+ hsize_t    nfields_out;
+ hsize_t    nrecords_out;
+
+ /* Define the inserted field information */
+ hid_t      field_type_new = H5T_NATIVE_INT;
+ int        data[NRECORDS] = { 0,1,2,3,4,5,6,7 };
+
+ /* Initialize the field type */
+ string_type = H5Tcopy( H5T_C_S1 );
+ H5Tset_size( string_type, 16 );
+ field_type[0] = string_type;
+ field_type[1] = H5T_NATIVE_INT;
+ field_type[2] = H5T_NATIVE_INT;
+ field_type[3] = H5T_NATIVE_FLOAT;
+ field_type[4] = H5T_NATIVE_DOUBLE;
+
+ /* Create a new file using default properties. */
+ file_id = H5Fcreate( "ex_table_11.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT );
+
+ /* Make the table */
+ status=H5TBmake_table( "Table Title",file_id,TABLE_NAME,NFIELDS,NRECORDS,
+                         dst_size1,field_names, dst_offset1, field_type,
+                         chunk_size, fill_data, compress, p_data  );
+
+ /* Insert the new field at the end of the field list */
+ position = NFIELDS;
+ status=H5TBinsert_field( file_id, TABLE_NAME, "New Field", field_type_new, position,
+  fill_data_new, data );
+
+ /* Get table info  */
+ status=H5TBget_table_info (file_id,TABLE_NAME, &nfields_out, &nrecords_out );
+
+ /* print */
+ printf ("Table has %d fields and %d records\n",(int)nfields_out,(int)nrecords_out);
+
+  /* close type */
+ H5Tclose( string_type );
+
+ /* close the file */
+ H5Fclose( file_id );
+
+ return 0;
+
+
+}
+
diff --git a/privatemodules/nc4/share/hdf5_examples/hl/c/ex_table_12.c b/privatemodules/nc4/share/hdf5_examples/hl/c/ex_table_12.c
new file mode 100644
index 0000000000000000000000000000000000000000..b6cc2b428824a2a87983807a93a280999ae4038f
--- /dev/null
+++ b/privatemodules/nc4/share/hdf5_examples/hl/c/ex_table_12.c
@@ -0,0 +1,112 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include "hdf5.h"
+#include "hdf5_hl.h"
+#include <stdlib.h>
+
+/*-------------------------------------------------------------------------
+ * Table API example
+ *
+ * H5TBdelete_field
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#define NFIELDS  (hsize_t)  5
+#define NRECORDS (hsize_t)  8
+#define TABLE_NAME          "table"
+
+int main( void )
+{
+ typedef struct Particle
+ {
+  char   name[16];
+  int    lati;
+  int    longi;
+  float  pressure;
+  double temperature;
+ } Particle;
+
+ /* Calculate the size and the offsets of our struct members in memory */
+ size_t dst_size =  sizeof( Particle );
+ size_t dst_offset[NFIELDS] = { HOFFSET( Particle, name ),
+  HOFFSET( Particle, lati ),
+  HOFFSET( Particle, longi ),
+  HOFFSET( Particle, pressure ),
+  HOFFSET( Particle, temperature )};
+
+ /* Define an array of Particles */
+ Particle  p_data[NRECORDS] = {
+ {"zero",0,0, 0.0f, 0.0},
+ {"one",10,10, 1.0f, 10.0},
+ {"two",  20,20, 2.0f, 20.0},
+ {"three",30,30, 3.0f, 30.0},
+ {"four", 40,40, 4.0f, 40.0},
+ {"five", 50,50, 5.0f, 50.0},
+ {"six",  60,60, 6.0f, 60.0},
+ {"seven",70,70, 7.0f, 70.0}
+ };
+
+ /* Define field information */
+ const char *field_names[NFIELDS]  =
+ { "Name","Latitude", "Longitude", "Pressure", "Temperature" };
+ hid_t      field_type[NFIELDS];
+ hid_t      string_type;
+ hid_t      file_id;
+ hsize_t    chunk_size = 10;
+ int        compress  = 0;
+ Particle   fill_data[1] =
+ { {"no data",-1,-1, -99.0f, -99.0} };
+ herr_t     status;
+ hsize_t    nfields_out;
+ hsize_t    nrecords_out;
+
+ /* Initialize the field type */
+ string_type = H5Tcopy( H5T_C_S1 );
+ H5Tset_size( string_type, 16 );
+ field_type[0] = string_type;
+ field_type[1] = H5T_NATIVE_INT;
+ field_type[2] = H5T_NATIVE_INT;
+ field_type[3] = H5T_NATIVE_FLOAT;
+ field_type[4] = H5T_NATIVE_DOUBLE;
+
+ /* Create a new file using default properties. */
+ file_id = H5Fcreate( "ex_table_12.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT );
+
+ /* Make a table */
+ status=H5TBmake_table( "Table Title", file_id, TABLE_NAME, NFIELDS, NRECORDS, dst_size,
+  field_names, dst_offset, field_type,
+  chunk_size, fill_data, compress, p_data  );
+
+ /* Delete the field */
+ status=H5TBdelete_field( file_id, TABLE_NAME, "Pressure" );
+
+ /* Get table info  */
+ status=H5TBget_table_info (file_id,TABLE_NAME, &nfields_out, &nrecords_out );
+
+ /* print */
+ printf ("Table has %d fields and %d records\n",(int)nfields_out,(int)nrecords_out);
+
+  /* close type */
+ H5Tclose( string_type );
+
+ /* close the file */
+ H5Fclose( file_id );
+
+ return 0;
+
+}
+
diff --git a/privatemodules/nc4/share/hdf5_examples/hl/c/image24pixel.txt b/privatemodules/nc4/share/hdf5_examples/hl/c/image24pixel.txt
new file mode 100644
index 0000000000000000000000000000000000000000..8af73f299e918329558b98b232efa79c86a6dc83
--- /dev/null
+++ b/privatemodules/nc4/share/hdf5_examples/hl/c/image24pixel.txt
@@ -0,0 +1,101475 @@
+components
+3
+height
+149
+width
+227
+48
+47
+45
+48
+47
+45
+49
+48
+46
+50
+49
+47
+53
+49
+46
+53
+49
+46
+54
+50
+47
+54
+50
+47
+56
+51
+47
+56
+51
+47
+58
+51
+45
+58
+51
+45
+58
+51
+45
+58
+51
+45
+58
+51
+45
+58
+51
+45
+58
+50
+47
+57
+49
+46
+57
+49
+46
+56
+48
+45
+56
+48
+45
+57
+49
+46
+57
+49
+46
+58
+50
+47
+56
+48
+45
+56
+48
+45
+56
+48
+45
+56
+48
+45
+56
+48
+45
+56
+48
+45
+56
+48
+45
+56
+48
+45
+54
+46
+43
+54
+46
+43
+54
+46
+43
+53
+45
+42
+53
+45
+42
+52
+44
+41
+52
+44
+41
+52
+44
+41
+52
+44
+41
+52
+44
+41
+52
+44
+41
+52
+44
+41
+52
+44
+41
+52
+44
+41
+52
+44
+41
+50
+45
+41
+47
+42
+36
+47
+44
+37
+47
+44
+37
+48
+45
+38
+49
+46
+39
+50
+47
+40
+51
+48
+41
+51
+48
+41
+54
+51
+44
+54
+51
+44
+55
+52
+45
+56
+53
+46
+56
+53
+46
+57
+54
+47
+58
+55
+48
+58
+55
+46
+65
+58
+48
+66
+60
+48
+68
+62
+50
+70
+64
+52
+73
+65
+52
+74
+66
+53
+75
+67
+54
+75
+67
+54
+77
+68
+53
+77
+68
+53
+79
+67
+51
+78
+66
+50
+79
+67
+51
+79
+67
+51
+80
+68
+52
+82
+69
+53
+82
+63
+49
+89
+63
+50
+98
+64
+52
+110
+66
+53
+125
+69
+54
+139
+72
+56
+153
+71
+57
+163
+70
+55
+175
+71
+58
+184
+71
+57
+190
+69
+58
+197
+71
+59
+199
+71
+62
+202
+71
+63
+203
+72
+64
+208
+69
+64
+231
+70
+76
+237
+67
+76
+235
+68
+75
+235
+69
+73
+238
+67
+73
+239
+66
+68
+241
+62
+66
+244
+61
+65
+248
+59
+65
+247
+58
+64
+244
+58
+63
+240
+60
+63
+233
+63
+64
+226
+64
+62
+215
+63
+60
+203
+65
+55
+187
+61
+47
+181
+64
+46
+181
+64
+46
+180
+63
+45
+180
+63
+45
+179
+64
+45
+178
+63
+45
+175
+64
+45
+173
+64
+44
+170
+65
+44
+166
+65
+45
+162
+66
+44
+159
+64
+42
+155
+65
+41
+152
+64
+42
+150
+65
+44
+148
+62
+45
+146
+63
+47
+146
+63
+47
+145
+62
+46
+145
+62
+44
+144
+61
+43
+146
+60
+43
+146
+60
+43
+148
+63
+43
+148
+63
+43
+148
+61
+42
+148
+61
+42
+148
+61
+42
+149
+62
+43
+150
+63
+44
+150
+64
+47
+150
+63
+54
+149
+62
+53
+151
+61
+50
+159
+63
+49
+169
+66
+51
+179
+68
+51
+188
+68
+52
+191
+68
+52
+185
+63
+48
+181
+65
+50
+172
+70
+56
+158
+72
+59
+135
+72
+57
+111
+65
+50
+84
+56
+42
+67
+51
+38
+61
+53
+50
+57
+53
+52
+57
+53
+52
+55
+51
+50
+55
+49
+49
+54
+48
+48
+53
+48
+45
+53
+48
+45
+55
+50
+47
+55
+50
+47
+55
+50
+47
+54
+49
+46
+54
+49
+45
+53
+48
+44
+53
+48
+44
+52
+49
+44
+47
+47
+45
+46
+48
+45
+47
+47
+45
+47
+47
+45
+48
+47
+45
+48
+47
+45
+50
+46
+45
+50
+46
+45
+53
+44
+45
+52
+43
+44
+52
+42
+43
+51
+41
+42
+55
+40
+43
+61
+46
+49
+69
+54
+57
+80
+58
+60
+106
+66
+67
+124
+73
+72
+141
+77
+77
+149
+79
+79
+159
+87
+91
+170
+100
+110
+170
+111
+131
+159
+116
+144
+148
+123
+163
+135
+127
+174
+128
+134
+186
+126
+136
+189
+115
+121
+173
+96
+97
+145
+84
+75
+118
+80
+68
+104
+83
+74
+103
+79
+71
+94
+77
+72
+94
+84
+81
+98
+102
+100
+111
+124
+125
+130
+141
+145
+144
+153
+158
+152
+163
+169
+159
+162
+168
+154
+158
+160
+147
+143
+146
+129
+123
+124
+108
+102
+103
+85
+88
+87
+69
+81
+78
+69
+85
+82
+91
+85
+81
+98
+85
+81
+98
+48
+47
+45
+48
+47
+45
+49
+48
+46
+49
+48
+46
+52
+48
+45
+53
+49
+46
+54
+50
+47
+54
+50
+47
+56
+51
+47
+56
+51
+47
+58
+51
+45
+58
+51
+45
+58
+51
+45
+58
+51
+45
+58
+51
+45
+58
+51
+45
+57
+49
+46
+57
+49
+46
+56
+48
+45
+56
+48
+45
+56
+48
+45
+56
+48
+45
+57
+49
+46
+57
+49
+46
+56
+48
+45
+56
+48
+45
+56
+48
+45
+56
+48
+45
+56
+48
+45
+56
+48
+45
+56
+48
+45
+56
+48
+45
+54
+46
+43
+54
+46
+43
+53
+45
+42
+53
+45
+42
+53
+45
+42
+52
+44
+41
+52
+44
+41
+52
+44
+41
+53
+45
+42
+53
+45
+42
+53
+45
+42
+53
+45
+42
+53
+45
+42
+53
+45
+42
+53
+45
+42
+51
+46
+42
+48
+43
+37
+48
+45
+38
+48
+45
+38
+49
+46
+39
+50
+47
+40
+51
+48
+41
+52
+49
+42
+52
+49
+42
+54
+51
+44
+54
+51
+44
+55
+52
+45
+55
+52
+45
+56
+53
+46
+57
+54
+47
+58
+55
+48
+58
+55
+46
+64
+57
+47
+65
+59
+47
+67
+61
+49
+69
+63
+51
+72
+64
+51
+73
+65
+52
+74
+66
+53
+74
+66
+53
+76
+67
+52
+76
+67
+52
+77
+65
+49
+77
+65
+49
+77
+65
+49
+78
+66
+50
+79
+67
+51
+81
+68
+52
+80
+62
+48
+85
+63
+49
+94
+65
+51
+106
+67
+52
+120
+68
+54
+132
+69
+52
+146
+69
+53
+156
+67
+51
+167
+67
+52
+175
+65
+52
+181
+65
+52
+188
+66
+55
+192
+68
+58
+196
+69
+60
+197
+70
+61
+205
+67
+64
+225
+69
+73
+231
+66
+73
+232
+67
+73
+234
+68
+72
+237
+68
+71
+239
+66
+68
+243
+64
+67
+246
+63
+67
+248
+59
+65
+247
+58
+64
+244
+58
+63
+240
+60
+63
+233
+63
+64
+224
+65
+62
+213
+64
+60
+202
+64
+54
+185
+62
+47
+181
+64
+46
+180
+63
+45
+180
+63
+45
+180
+63
+45
+178
+63
+44
+176
+63
+45
+175
+64
+45
+173
+64
+44
+169
+64
+43
+166
+65
+45
+161
+65
+43
+159
+64
+42
+155
+65
+41
+152
+64
+42
+150
+65
+44
+148
+62
+45
+146
+63
+47
+145
+62
+46
+145
+62
+46
+145
+62
+44
+144
+61
+43
+146
+60
+43
+146
+60
+43
+148
+63
+43
+147
+62
+42
+148
+61
+42
+148
+61
+42
+148
+61
+42
+149
+62
+43
+150
+63
+44
+150
+64
+47
+148
+64
+53
+149
+62
+53
+152
+62
+51
+160
+62
+49
+171
+65
+51
+181
+68
+52
+189
+67
+52
+191
+68
+53
+187
+65
+50
+183
+67
+54
+172
+70
+56
+156
+73
+59
+133
+71
+58
+108
+64
+51
+83
+57
+42
+66
+52
+41
+62
+54
+51
+58
+54
+53
+57
+53
+52
+56
+52
+51
+56
+50
+50
+55
+49
+49
+54
+49
+46
+54
+49
+46
+55
+50
+47
+55
+50
+47
+55
+50
+47
+54
+49
+46
+54
+49
+45
+53
+48
+44
+53
+48
+44
+52
+49
+44
+47
+47
+45
+46
+48
+45
+47
+47
+45
+47
+47
+45
+48
+47
+45
+48
+47
+45
+50
+46
+45
+50
+46
+45
+51
+45
+45
+53
+44
+45
+52
+42
+43
+51
+41
+42
+53
+41
+43
+60
+45
+48
+67
+52
+55
+78
+56
+58
+100
+62
+61
+118
+69
+65
+134
+74
+73
+143
+78
+76
+154
+84
+86
+164
+97
+106
+165
+108
+125
+157
+114
+142
+145
+123
+162
+134
+128
+174
+127
+133
+185
+123
+132
+187
+111
+117
+169
+91
+91
+141
+81
+72
+117
+79
+67
+105
+79
+70
+101
+79
+71
+95
+80
+72
+95
+82
+78
+95
+91
+89
+102
+110
+111
+116
+131
+135
+136
+148
+153
+149
+153
+158
+151
+154
+160
+148
+153
+157
+143
+143
+145
+131
+126
+127
+111
+106
+107
+89
+93
+91
+76
+86
+83
+74
+88
+83
+90
+86
+82
+97
+88
+81
+97
+47
+46
+44
+47
+46
+44
+48
+47
+45
+49
+48
+46
+52
+48
+45
+52
+48
+45
+53
+49
+46
+53
+49
+46
+55
+50
+46
+55
+50
+46
+55
+50
+46
+55
+50
+46
+57
+50
+44
+57
+50
+44
+57
+50
+44
+57
+50
+44
+57
+49
+46
+56
+48
+46
+55
+47
+45
+55
+47
+45
+55
+47
+45
+55
+47
+45
+56
+48
+46
+57
+49
+47
+56
+48
+46
+56
+48
+46
+56
+48
+46
+56
+48
+46
+56
+48
+46
+56
+48
+46
+56
+48
+46
+56
+48
+46
+54
+46
+44
+53
+45
+43
+53
+45
+43
+53
+45
+43
+52
+44
+42
+52
+44
+42
+52
+44
+42
+52
+44
+42
+53
+45
+43
+53
+45
+43
+53
+45
+43
+53
+45
+43
+53
+45
+43
+53
+45
+43
+53
+45
+43
+51
+46
+42
+50
+45
+39
+49
+46
+39
+50
+47
+40
+51
+48
+41
+51
+48
+41
+52
+49
+42
+52
+49
+42
+53
+50
+43
+54
+51
+44
+54
+51
+44
+54
+51
+44
+55
+52
+45
+56
+53
+46
+57
+54
+47
+57
+54
+47
+58
+55
+46
+63
+56
+46
+64
+58
+46
+66
+60
+48
+68
+62
+50
+71
+63
+52
+72
+64
+53
+72
+64
+51
+72
+64
+51
+73
+64
+49
+73
+64
+49
+75
+63
+49
+75
+63
+49
+75
+63
+47
+76
+64
+48
+77
+65
+49
+78
+66
+50
+77
+65
+49
+81
+65
+49
+89
+66
+50
+100
+67
+50
+113
+67
+51
+124
+67
+50
+135
+66
+50
+146
+65
+48
+152
+60
+45
+160
+58
+43
+167
+59
+46
+175
+61
+50
+181
+64
+54
+186
+68
+58
+191
+70
+61
+197
+68
+62
+217
+67
+69
+225
+64
+70
+227
+66
+71
+231
+66
+70
+234
+68
+70
+240
+67
+69
+244
+65
+68
+248
+63
+68
+250
+59
+64
+249
+58
+63
+245
+59
+64
+240
+61
+64
+232
+64
+64
+220
+65
+61
+209
+64
+59
+198
+64
+53
+183
+61
+46
+179
+64
+45
+179
+64
+45
+178
+63
+44
+178
+63
+45
+176
+63
+45
+175
+62
+44
+173
+64
+44
+170
+63
+45
+167
+64
+45
+165
+64
+44
+161
+65
+43
+157
+65
+44
+154
+63
+42
+152
+64
+42
+149
+64
+43
+148
+62
+45
+145
+62
+46
+145
+62
+46
+145
+62
+46
+144
+61
+43
+144
+61
+43
+144
+61
+43
+144
+61
+43
+145
+62
+44
+145
+62
+44
+146
+60
+43
+146
+60
+43
+147
+61
+44
+147
+61
+44
+148
+63
+43
+149
+63
+46
+149
+65
+54
+150
+63
+53
+154
+62
+51
+163
+62
+50
+175
+65
+52
+185
+67
+53
+191
+68
+53
+193
+67
+53
+192
+68
+56
+184
+70
+59
+174
+73
+61
+153
+74
+61
+129
+71
+59
+104
+64
+52
+81
+58
+44
+66
+53
+44
+63
+55
+52
+61
+55
+55
+60
+54
+54
+58
+52
+52
+57
+52
+49
+56
+51
+48
+55
+50
+47
+55
+50
+47
+54
+50
+47
+54
+50
+47
+54
+50
+47
+53
+49
+46
+53
+50
+45
+52
+49
+44
+52
+49
+44
+50
+49
+44
+46
+48
+45
+44
+49
+45
+46
+48
+45
+46
+48
+45
+47
+47
+45
+47
+47
+45
+48
+47
+45
+50
+46
+45
+53
+47
+47
+52
+46
+46
+53
+44
+45
+52
+42
+43
+52
+42
+43
+57
+45
+47
+62
+50
+52
+73
+53
+54
+91
+57
+55
+108
+63
+57
+124
+69
+64
+134
+73
+68
+144
+79
+77
+152
+91
+96
+155
+102
+118
+148
+109
+136
+140
+119
+158
+131
+125
+173
+125
+130
+185
+117
+126
+183
+102
+109
+164
+84
+86
+137
+77
+69
+118
+76
+65
+107
+77
+65
+101
+79
+70
+99
+81
+72
+99
+77
+72
+94
+78
+75
+92
+91
+91
+101
+113
+116
+121
+133
+137
+136
+135
+140
+134
+138
+143
+136
+141
+144
+133
+134
+138
+124
+120
+122
+108
+102
+105
+88
+90
+91
+77
+86
+83
+76
+90
+85
+91
+90
+84
+96
+91
+83
+96
+46
+45
+43
+47
+46
+44
+47
+46
+44
+48
+47
+45
+51
+47
+44
+52
+48
+45
+52
+48
+45
+52
+48
+45
+54
+49
+45
+54
+49
+45
+54
+49
+45
+54
+49
+45
+56
+49
+43
+56
+49
+43
+56
+49
+43
+56
+49
+43
+55
+47
+45
+55
+47
+45
+54
+46
+44
+54
+46
+44
+54
+46
+44
+54
+46
+44
+55
+47
+45
+55
+47
+45
+56
+48
+46
+56
+48
+46
+56
+48
+46
+56
+48
+46
+56
+48
+46
+56
+48
+46
+56
+48
+46
+56
+48
+46
+53
+45
+43
+53
+45
+43
+53
+45
+43
+52
+44
+42
+52
+44
+42
+52
+44
+42
+51
+43
+41
+51
+43
+41
+54
+46
+44
+54
+46
+44
+54
+46
+44
+54
+46
+44
+54
+46
+44
+54
+46
+44
+54
+46
+44
+52
+47
+44
+51
+48
+43
+51
+48
+41
+51
+48
+41
+52
+49
+42
+52
+49
+42
+53
+50
+43
+53
+50
+43
+53
+50
+43
+53
+50
+43
+53
+50
+43
+54
+51
+44
+55
+52
+45
+56
+53
+46
+56
+53
+46
+57
+54
+47
+57
+54
+45
+62
+55
+45
+63
+57
+45
+64
+58
+46
+66
+60
+48
+69
+61
+50
+69
+61
+50
+70
+62
+49
+70
+62
+49
+71
+61
+49
+71
+62
+47
+72
+60
+46
+73
+61
+47
+73
+61
+47
+74
+62
+46
+76
+64
+48
+74
+65
+48
+75
+68
+50
+78
+69
+52
+85
+68
+52
+94
+68
+51
+105
+68
+50
+115
+66
+49
+126
+65
+47
+134
+63
+45
+140
+57
+41
+148
+57
+39
+157
+57
+42
+163
+60
+45
+172
+64
+51
+179
+69
+56
+184
+72
+60
+193
+70
+62
+210
+68
+67
+218
+65
+67
+222
+66
+67
+226
+68
+67
+231
+67
+68
+236
+66
+67
+243
+64
+67
+247
+63
+65
+250
+59
+64
+249
+58
+63
+245
+59
+64
+238
+62
+64
+229
+65
+64
+218
+66
+61
+205
+64
+57
+194
+64
+51
+181
+61
+45
+176
+64
+44
+176
+64
+44
+176
+64
+44
+175
+62
+44
+174
+63
+44
+174
+63
+44
+172
+63
+43
+169
+64
+45
+166
+63
+44
+163
+64
+43
+160
+64
+42
+156
+64
+43
+152
+64
+42
+150
+64
+41
+148
+63
+42
+145
+62
+44
+145
+62
+46
+145
+62
+46
+144
+61
+45
+144
+61
+43
+144
+61
+43
+143
+60
+42
+143
+60
+42
+144
+61
+43
+144
+61
+43
+143
+60
+42
+143
+60
+42
+146
+60
+43
+145
+62
+44
+148
+62
+45
+146
+63
+45
+149
+65
+54
+150
+63
+53
+156
+62
+50
+166
+64
+52
+178
+66
+54
+188
+67
+56
+193
+67
+55
+194
+66
+55
+194
+70
+60
+186
+74
+63
+172
+76
+64
+151
+75
+62
+124
+70
+58
+98
+64
+52
+76
+58
+46
+65
+55
+45
+64
+56
+53
+62
+57
+54
+61
+55
+55
+60
+55
+52
+58
+53
+50
+57
+52
+49
+56
+51
+48
+56
+51
+48
+54
+50
+47
+54
+50
+47
+54
+50
+47
+51
+50
+46
+53
+50
+45
+50
+49
+44
+50
+49
+44
+49
+50
+45
+45
+50
+46
+45
+50
+46
+47
+49
+46
+47
+49
+46
+48
+48
+46
+48
+48
+46
+49
+48
+46
+49
+48
+46
+53
+49
+48
+54
+48
+48
+53
+47
+47
+53
+44
+45
+52
+43
+44
+54
+44
+45
+58
+48
+49
+68
+50
+50
+84
+55
+49
+99
+59
+51
+113
+65
+55
+123
+69
+59
+130
+72
+68
+137
+82
+85
+141
+95
+108
+139
+105
+130
+131
+115
+152
+125
+121
+171
+120
+125
+181
+111
+119
+181
+96
+102
+162
+81
+82
+139
+76
+69
+121
+76
+64
+112
+76
+64
+104
+80
+69
+103
+81
+70
+102
+76
+67
+94
+71
+66
+86
+77
+76
+90
+94
+94
+102
+106
+110
+113
+117
+121
+120
+120
+125
+119
+122
+128
+118
+119
+122
+111
+107
+111
+97
+96
+98
+84
+87
+89
+76
+84
+84
+76
+93
+87
+89
+93
+86
+93
+93
+86
+94
+45
+45
+45
+45
+45
+45
+46
+45
+43
+47
+46
+44
+48
+47
+45
+49
+48
+46
+51
+47
+44
+52
+48
+45
+51
+47
+44
+51
+47
+44
+52
+47
+43
+52
+47
+43
+52
+47
+43
+52
+47
+43
+54
+47
+41
+54
+47
+41
+52
+47
+44
+52
+47
+44
+51
+46
+43
+51
+46
+43
+51
+46
+43
+51
+46
+43
+52
+47
+44
+52
+47
+44
+53
+48
+45
+53
+48
+45
+53
+48
+45
+53
+48
+45
+53
+48
+45
+53
+48
+45
+53
+48
+45
+53
+48
+45
+51
+46
+43
+51
+46
+43
+50
+45
+42
+50
+45
+42
+50
+45
+42
+49
+44
+41
+49
+44
+41
+49
+44
+41
+52
+47
+44
+52
+47
+44
+52
+47
+44
+52
+47
+44
+52
+47
+44
+52
+47
+44
+52
+47
+44
+52
+47
+44
+52
+49
+44
+52
+49
+44
+52
+49
+44
+52
+49
+44
+52
+49
+44
+53
+50
+45
+53
+50
+45
+53
+50
+45
+53
+50
+45
+53
+50
+45
+54
+51
+46
+54
+51
+46
+55
+52
+47
+56
+53
+48
+57
+54
+49
+57
+54
+47
+60
+53
+45
+61
+54
+44
+63
+56
+46
+64
+57
+47
+66
+58
+47
+67
+59
+48
+67
+59
+48
+67
+59
+46
+68
+58
+46
+68
+58
+46
+70
+58
+46
+71
+59
+45
+72
+60
+46
+73
+61
+47
+74
+62
+48
+73
+64
+49
+74
+71
+54
+77
+72
+53
+82
+71
+53
+89
+70
+53
+98
+69
+51
+106
+68
+49
+117
+66
+47
+125
+62
+44
+130
+59
+41
+139
+58
+41
+147
+58
+42
+154
+61
+44
+163
+66
+50
+172
+70
+56
+178
+74
+61
+187
+73
+63
+204
+71
+66
+212
+68
+67
+216
+68
+66
+221
+69
+66
+226
+66
+66
+233
+65
+65
+240
+61
+64
+244
+60
+62
+249
+58
+63
+248
+58
+60
+244
+60
+62
+237
+63
+62
+225
+66
+62
+211
+67
+58
+197
+65
+53
+185
+63
+48
+178
+63
+45
+174
+63
+44
+174
+63
+44
+174
+63
+44
+173
+62
+45
+172
+62
+45
+172
+62
+45
+170
+63
+45
+168
+62
+46
+164
+63
+45
+160
+63
+44
+158
+63
+43
+154
+63
+44
+151
+63
+43
+149
+62
+42
+147
+62
+42
+145
+62
+44
+144
+63
+46
+143
+62
+45
+143
+62
+45
+143
+62
+45
+142
+61
+44
+142
+61
+44
+142
+61
+44
+142
+61
+44
+142
+61
+44
+142
+61
+44
+142
+61
+44
+143
+60
+44
+143
+62
+45
+145
+62
+46
+144
+63
+46
+148
+66
+52
+151
+65
+52
+157
+64
+49
+168
+64
+51
+182
+65
+55
+191
+67
+57
+197
+66
+56
+196
+65
+55
+190
+67
+59
+183
+72
+63
+166
+76
+67
+144
+74
+64
+116
+69
+59
+90
+62
+50
+69
+57
+45
+60
+53
+43
+64
+57
+51
+64
+56
+53
+63
+55
+53
+62
+54
+51
+61
+53
+50
+60
+52
+49
+57
+52
+48
+56
+51
+47
+54
+50
+47
+52
+51
+47
+52
+51
+47
+50
+51
+46
+51
+50
+46
+49
+50
+45
+49
+50
+45
+48
+50
+45
+45
+50
+46
+44
+50
+46
+45
+50
+46
+45
+50
+46
+47
+49
+46
+47
+49
+46
+48
+48
+46
+49
+48
+46
+51
+50
+48
+53
+49
+48
+53
+49
+48
+52
+46
+46
+50
+44
+44
+52
+43
+44
+55
+46
+47
+61
+47
+46
+78
+53
+46
+89
+57
+46
+101
+61
+49
+110
+64
+51
+115
+66
+59
+121
+75
+75
+128
+90
+101
+131
+103
+128
+127
+112
+151
+122
+120
+170
+117
+123
+183
+107
+115
+180
+95
+100
+166
+84
+84
+148
+79
+71
+131
+76
+66
+119
+78
+65
+109
+78
+66
+104
+77
+65
+101
+74
+65
+96
+71
+66
+89
+71
+70
+88
+75
+75
+87
+77
+80
+85
+93
+99
+99
+96
+102
+98
+98
+105
+97
+96
+102
+92
+90
+96
+84
+87
+91
+77
+85
+88
+77
+88
+88
+80
+94
+89
+86
+96
+87
+88
+96
+87
+90
+44
+44
+44
+44
+44
+44
+46
+45
+43
+46
+45
+43
+47
+46
+44
+48
+47
+45
+51
+47
+44
+51
+47
+44
+50
+46
+43
+50
+46
+43
+51
+46
+42
+51
+46
+42
+51
+46
+42
+51
+46
+42
+53
+46
+40
+53
+45
+42
+51
+46
+43
+51
+46
+43
+50
+45
+42
+49
+44
+41
+49
+44
+41
+50
+45
+42
+51
+46
+43
+51
+46
+43
+51
+46
+43
+51
+46
+43
+51
+46
+43
+51
+46
+43
+51
+46
+43
+51
+46
+43
+51
+46
+43
+51
+46
+43
+50
+45
+42
+50
+45
+42
+50
+45
+42
+50
+45
+42
+49
+44
+41
+49
+44
+41
+49
+44
+41
+48
+43
+40
+51
+46
+43
+51
+46
+43
+51
+46
+43
+51
+46
+43
+51
+46
+43
+51
+46
+43
+51
+46
+43
+51
+46
+43
+52
+49
+44
+52
+49
+44
+52
+49
+44
+52
+49
+44
+52
+49
+44
+52
+49
+44
+52
+49
+44
+52
+49
+44
+52
+49
+44
+53
+50
+45
+53
+50
+45
+54
+51
+46
+55
+52
+47
+56
+53
+48
+56
+53
+48
+56
+53
+46
+59
+52
+44
+60
+53
+43
+61
+54
+44
+62
+55
+45
+64
+55
+46
+65
+57
+46
+65
+57
+46
+65
+57
+46
+67
+57
+47
+67
+57
+45
+69
+57
+45
+70
+58
+46
+71
+59
+47
+72
+60
+46
+74
+62
+48
+72
+65
+49
+74
+71
+54
+73
+72
+54
+78
+71
+53
+86
+70
+54
+92
+69
+51
+100
+67
+50
+110
+64
+48
+118
+62
+45
+123
+60
+43
+130
+59
+41
+140
+59
+42
+148
+61
+44
+156
+64
+49
+163
+70
+53
+170
+74
+58
+180
+74
+61
+196
+72
+64
+204
+69
+65
+209
+70
+65
+214
+69
+64
+222
+67
+65
+228
+64
+62
+236
+62
+63
+241
+58
+60
+247
+59
+60
+244
+58
+59
+240
+60
+61
+233
+64
+61
+220
+67
+61
+205
+67
+56
+190
+64
+50
+177
+62
+44
+174
+63
+44
+171
+64
+44
+170
+63
+43
+170
+63
+43
+170
+63
+45
+169
+62
+44
+169
+62
+44
+168
+63
+44
+165
+62
+45
+162
+63
+44
+160
+63
+44
+155
+62
+44
+151
+63
+43
+149
+62
+42
+147
+62
+41
+145
+63
+42
+143
+62
+43
+143
+62
+45
+143
+62
+45
+143
+62
+45
+142
+61
+44
+142
+61
+44
+142
+61
+44
+141
+60
+43
+142
+61
+44
+139
+60
+43
+141
+60
+43
+139
+60
+43
+139
+60
+45
+140
+61
+44
+141
+62
+47
+142
+63
+46
+148
+66
+52
+151
+65
+50
+160
+64
+50
+172
+66
+53
+185
+67
+57
+194
+67
+58
+197
+66
+58
+194
+65
+59
+186
+65
+57
+177
+73
+64
+163
+78
+71
+141
+78
+69
+111
+71
+61
+83
+63
+52
+65
+59
+47
+57
+54
+45
+64
+57
+51
+65
+55
+53
+63
+55
+52
+62
+54
+51
+60
+52
+49
+57
+52
+48
+56
+51
+47
+55
+52
+47
+52
+51
+47
+52
+51
+47
+51
+52
+47
+50
+51
+46
+50
+51
+46
+48
+50
+45
+48
+50
+45
+46
+51
+45
+45
+51
+47
+45
+51
+47
+46
+51
+47
+46
+51
+47
+48
+50
+47
+48
+50
+47
+49
+49
+47
+49
+49
+47
+50
+49
+47
+51
+50
+48
+51
+50
+48
+52
+48
+47
+50
+46
+45
+49
+45
+44
+52
+46
+46
+56
+46
+44
+71
+52
+45
+79
+52
+41
+88
+56
+43
+96
+60
+48
+101
+63
+54
+109
+71
+70
+121
+89
+100
+130
+107
+133
+128
+117
+159
+124
+124
+178
+119
+124
+188
+110
+117
+187
+100
+104
+175
+91
+91
+161
+82
+77
+143
+76
+66
+126
+79
+65
+114
+76
+64
+104
+73
+61
+99
+72
+62
+96
+72
+66
+94
+69
+67
+88
+64
+66
+79
+59
+64
+70
+66
+71
+74
+68
+77
+74
+74
+81
+74
+74
+81
+73
+73
+81
+70
+75
+81
+69
+79
+85
+73
+86
+87
+79
+94
+89
+83
+96
+89
+83
+96
+88
+85
+43
+43
+43
+43
+43
+43
+44
+44
+44
+45
+45
+45
+47
+46
+44
+47
+46
+44
+48
+47
+45
+48
+47
+45
+49
+45
+42
+49
+45
+42
+49
+45
+42
+49
+45
+42
+50
+45
+41
+50
+45
+41
+50
+45
+41
+50
+45
+41
+50
+45
+42
+50
+44
+44
+49
+43
+43
+49
+43
+43
+49
+43
+43
+49
+43
+43
+50
+44
+44
+50
+44
+44
+49
+43
+43
+49
+43
+43
+49
+43
+43
+49
+43
+43
+49
+43
+43
+49
+43
+43
+49
+43
+43
+49
+43
+43
+50
+44
+44
+50
+44
+44
+50
+44
+44
+49
+43
+43
+49
+43
+43
+49
+43
+43
+48
+42
+42
+48
+42
+42
+51
+45
+45
+51
+45
+45
+51
+45
+45
+51
+45
+45
+51
+45
+45
+51
+45
+45
+51
+45
+45
+51
+46
+43
+52
+49
+44
+52
+49
+44
+52
+49
+44
+51
+48
+43
+51
+48
+43
+51
+48
+43
+51
+48
+43
+51
+48
+43
+52
+49
+44
+52
+49
+44
+53
+50
+45
+54
+51
+46
+55
+52
+47
+55
+52
+47
+56
+53
+48
+56
+53
+46
+58
+51
+43
+59
+52
+44
+60
+53
+45
+61
+54
+46
+63
+54
+47
+63
+54
+45
+63
+54
+45
+63
+55
+44
+66
+56
+46
+66
+56
+46
+69
+56
+47
+69
+57
+45
+71
+59
+47
+72
+60
+48
+74
+62
+50
+72
+64
+51
+72
+69
+54
+71
+70
+52
+75
+69
+53
+81
+68
+52
+88
+67
+50
+95
+66
+50
+102
+63
+46
+110
+61
+44
+118
+61
+44
+124
+58
+42
+133
+57
+41
+140
+59
+42
+147
+61
+46
+155
+66
+50
+162
+70
+55
+172
+70
+56
+187
+70
+60
+194
+70
+62
+201
+70
+62
+208
+69
+62
+217
+68
+64
+226
+67
+63
+234
+64
+64
+240
+62
+62
+242
+58
+58
+241
+59
+58
+236
+60
+60
+228
+65
+60
+214
+67
+59
+198
+68
+54
+181
+64
+47
+170
+61
+41
+170
+63
+45
+169
+64
+45
+169
+64
+45
+168
+63
+44
+168
+62
+46
+168
+62
+46
+167
+61
+45
+165
+62
+45
+163
+61
+46
+160
+63
+46
+158
+63
+45
+154
+63
+45
+150
+63
+44
+147
+62
+42
+145
+63
+42
+143
+62
+41
+143
+62
+43
+141
+62
+45
+141
+62
+45
+140
+61
+44
+140
+61
+46
+140
+61
+46
+139
+60
+45
+139
+60
+45
+139
+60
+45
+138
+61
+45
+138
+59
+44
+137
+60
+44
+138
+60
+47
+139
+62
+46
+139
+61
+48
+140
+63
+47
+146
+67
+50
+152
+66
+49
+161
+65
+49
+174
+66
+54
+188
+67
+58
+194
+67
+60
+196
+67
+61
+192
+67
+61
+185
+70
+65
+178
+81
+74
+165
+88
+82
+143
+88
+81
+115
+82
+73
+87
+73
+62
+67
+67
+55
+60
+63
+54
+62
+57
+51
+64
+55
+50
+62
+55
+49
+61
+54
+48
+58
+53
+47
+57
+52
+46
+56
+51
+47
+54
+51
+46
+52
+51
+46
+52
+51
+46
+51
+52
+47
+49
+51
+46
+49
+51
+46
+46
+51
+45
+46
+51
+45
+46
+51
+45
+45
+51
+47
+45
+51
+47
+45
+51
+47
+45
+51
+47
+46
+51
+47
+46
+51
+47
+48
+50
+47
+48
+50
+47
+48
+48
+46
+49
+49
+47
+50
+50
+48
+50
+49
+47
+48
+47
+45
+47
+46
+44
+50
+46
+45
+52
+47
+44
+63
+48
+43
+68
+48
+41
+75
+51
+41
+84
+56
+45
+90
+60
+52
+100
+70
+70
+117
+93
+106
+131
+115
+141
+137
+128
+171
+133
+132
+190
+126
+131
+199
+116
+122
+198
+109
+112
+189
+99
+101
+175
+86
+83
+154
+76
+67
+130
+75
+63
+113
+73
+60
+103
+71
+59
+99
+69
+62
+95
+70
+66
+93
+68
+66
+87
+63
+65
+78
+59
+63
+72
+58
+66
+69
+62
+72
+71
+68
+77
+72
+71
+81
+73
+71
+81
+72
+74
+82
+71
+78
+86
+75
+85
+88
+77
+94
+90
+79
+97
+89
+78
+97
+88
+79
+43
+43
+43
+43
+43
+43
+44
+44
+44
+44
+44
+44
+46
+44
+45
+47
+46
+44
+48
+47
+45
+48
+47
+45
+49
+45
+42
+49
+45
+42
+49
+45
+42
+49
+45
+42
+50
+45
+41
+50
+45
+41
+50
+45
+41
+50
+45
+42
+50
+44
+44
+49
+43
+43
+49
+43
+43
+48
+42
+42
+48
+42
+42
+49
+43
+43
+49
+43
+43
+50
+44
+44
+48
+42
+42
+48
+42
+42
+48
+42
+42
+48
+42
+42
+48
+42
+42
+48
+42
+42
+48
+42
+42
+48
+42
+42
+50
+44
+44
+50
+44
+44
+50
+44
+44
+49
+43
+43
+49
+43
+43
+48
+42
+42
+48
+42
+42
+48
+42
+42
+50
+44
+44
+50
+44
+44
+50
+44
+44
+50
+44
+44
+50
+44
+44
+50
+44
+44
+50
+44
+44
+50
+44
+44
+51
+47
+44
+51
+48
+43
+51
+48
+43
+51
+48
+43
+51
+48
+43
+51
+48
+43
+51
+48
+43
+51
+48
+43
+52
+49
+44
+52
+49
+44
+53
+50
+45
+54
+51
+46
+54
+51
+46
+55
+52
+47
+56
+53
+48
+56
+53
+48
+57
+50
+44
+58
+51
+43
+59
+52
+44
+60
+53
+45
+62
+53
+46
+62
+53
+46
+62
+53
+46
+62
+53
+44
+66
+56
+47
+66
+56
+46
+69
+56
+47
+69
+56
+47
+71
+58
+49
+73
+61
+49
+74
+62
+50
+73
+63
+51
+70
+67
+52
+70
+67
+52
+74
+66
+53
+79
+65
+52
+84
+65
+50
+92
+64
+50
+98
+62
+48
+106
+60
+45
+113
+60
+46
+119
+57
+42
+125
+56
+41
+133
+56
+40
+140
+58
+44
+149
+61
+47
+155
+66
+52
+164
+66
+53
+178
+70
+58
+186
+69
+59
+193
+70
+62
+202
+71
+63
+212
+71
+64
+222
+70
+65
+231
+67
+65
+238
+66
+64
+237
+59
+59
+235
+59
+59
+231
+62
+59
+223
+66
+59
+209
+68
+58
+191
+68
+52
+175
+64
+45
+164
+62
+40
+166
+65
+45
+166
+65
+45
+165
+64
+44
+165
+64
+46
+165
+64
+46
+164
+63
+45
+164
+63
+45
+164
+62
+47
+162
+62
+46
+159
+64
+46
+156
+63
+46
+152
+63
+45
+149
+62
+43
+145
+63
+42
+143
+62
+41
+143
+62
+43
+141
+62
+45
+141
+62
+45
+141
+62
+45
+140
+61
+44
+140
+61
+46
+139
+60
+45
+139
+60
+45
+138
+61
+45
+138
+61
+45
+136
+60
+46
+136
+60
+46
+136
+60
+46
+136
+60
+47
+135
+62
+47
+136
+62
+49
+139
+63
+49
+145
+68
+50
+150
+67
+49
+162
+66
+52
+173
+67
+54
+186
+67
+59
+193
+68
+62
+193
+68
+62
+187
+69
+65
+185
+80
+76
+178
+91
+84
+165
+101
+92
+145
+102
+93
+117
+95
+84
+91
+85
+73
+71
+77
+65
+67
+73
+63
+60
+57
+50
+63
+56
+50
+62
+55
+49
+59
+54
+48
+57
+52
+46
+55
+52
+45
+54
+51
+46
+52
+51
+46
+52
+51
+46
+51
+52
+46
+50
+52
+47
+49
+51
+46
+47
+52
+46
+46
+51
+45
+46
+51
+45
+46
+51
+45
+45
+51
+47
+45
+51
+47
+45
+51
+47
+45
+51
+47
+46
+51
+47
+46
+51
+47
+48
+50
+47
+48
+50
+47
+47
+47
+45
+48
+48
+46
+50
+50
+48
+50
+50
+48
+49
+48
+46
+48
+47
+45
+48
+47
+45
+51
+47
+44
+56
+44
+44
+59
+44
+41
+67
+48
+42
+75
+55
+48
+83
+60
+54
+94
+73
+72
+116
+98
+110
+135
+122
+148
+144
+138
+182
+140
+141
+198
+132
+136
+207
+122
+128
+204
+114
+120
+198
+105
+107
+182
+87
+87
+159
+73
+68
+132
+69
+61
+110
+71
+60
+100
+68
+60
+97
+67
+62
+94
+67
+65
+89
+64
+67
+86
+64
+68
+80
+62
+69
+75
+71
+81
+82
+75
+87
+85
+81
+94
+87
+85
+96
+88
+83
+95
+85
+82
+94
+84
+84
+94
+83
+89
+95
+83
+94
+91
+76
+97
+90
+74
+97
+90
+74
+44
+45
+47
+44
+45
+47
+44
+45
+47
+44
+46
+45
+45
+45
+45
+45
+45
+45
+46
+45
+43
+46
+45
+43
+47
+46
+44
+47
+46
+44
+49
+45
+42
+48
+44
+41
+48
+44
+41
+48
+44
+41
+47
+43
+40
+47
+43
+40
+47
+43
+42
+47
+43
+42
+47
+43
+42
+47
+43
+42
+47
+43
+42
+47
+43
+42
+47
+43
+42
+48
+44
+43
+47
+43
+42
+47
+43
+42
+47
+43
+42
+47
+43
+42
+47
+43
+42
+47
+43
+42
+47
+43
+42
+47
+43
+42
+47
+43
+42
+47
+43
+42
+47
+43
+42
+48
+44
+43
+48
+44
+43
+49
+45
+44
+49
+45
+44
+50
+46
+45
+49
+45
+44
+49
+45
+44
+49
+45
+44
+49
+45
+44
+49
+45
+44
+49
+45
+44
+49
+45
+44
+49
+45
+44
+48
+44
+41
+49
+45
+42
+50
+46
+43
+51
+47
+44
+51
+47
+44
+51
+47
+44
+51
+47
+44
+51
+47
+44
+51
+47
+44
+51
+47
+44
+51
+47
+44
+51
+47
+44
+52
+48
+45
+53
+49
+46
+54
+50
+47
+55
+52
+47
+56
+48
+45
+57
+50
+44
+58
+51
+45
+59
+52
+46
+61
+52
+47
+62
+53
+46
+62
+53
+46
+62
+53
+46
+63
+52
+46
+63
+53
+44
+66
+53
+45
+67
+54
+46
+68
+55
+47
+70
+57
+48
+71
+58
+49
+70
+60
+50
+71
+63
+52
+72
+64
+53
+74
+64
+54
+80
+63
+53
+84
+62
+51
+88
+60
+49
+94
+57
+48
+98
+54
+43
+109
+57
+46
+116
+56
+45
+124
+56
+43
+131
+57
+44
+141
+59
+47
+147
+61
+48
+152
+63
+49
+158
+62
+48
+167
+65
+51
+173
+65
+52
+181
+67
+56
+190
+69
+58
+202
+71
+61
+212
+71
+62
+222
+69
+63
+229
+67
+64
+232
+64
+63
+234
+66
+65
+230
+68
+65
+218
+69
+62
+200
+68
+56
+183
+66
+49
+170
+65
+46
+162
+66
+44
+162
+65
+46
+161
+64
+45
+162
+63
+44
+162
+62
+46
+161
+61
+45
+161
+61
+45
+162
+62
+46
+160
+63
+47
+156
+60
+44
+154
+61
+44
+152
+60
+45
+149
+62
+45
+147
+61
+44
+144
+61
+43
+142
+61
+42
+140
+62
+42
+139
+60
+43
+139
+60
+43
+138
+61
+45
+137
+60
+44
+137
+60
+44
+137
+60
+44
+136
+58
+45
+135
+59
+45
+137
+61
+47
+134
+60
+47
+134
+60
+47
+135
+61
+48
+136
+62
+51
+136
+64
+50
+137
+65
+53
+139
+65
+52
+145
+69
+53
+151
+68
+52
+163
+69
+57
+177
+73
+62
+186
+71
+64
+187
+68
+62
+187
+69
+65
+184
+77
+71
+180
+90
+82
+175
+102
+95
+163
+113
+102
+145
+115
+104
+126
+114
+100
+106
+106
+94
+86
+94
+83
+73
+81
+70
+76
+76
+66
+74
+70
+61
+66
+62
+53
+60
+56
+47
+57
+53
+44
+55
+52
+43
+54
+51
+44
+51
+51
+43
+52
+51
+46
+51
+52
+46
+49
+52
+45
+49
+52
+45
+48
+50
+45
+47
+49
+44
+44
+49
+43
+44
+49
+43
+45
+50
+46
+45
+50
+46
+45
+50
+46
+45
+50
+46
+47
+49
+46
+47
+49
+46
+47
+49
+46
+47
+49
+46
+48
+50
+47
+48
+50
+47
+49
+49
+47
+49
+49
+47
+49
+49
+47
+49
+49
+47
+49
+49
+47
+52
+48
+47
+52
+43
+48
+59
+47
+51
+65
+51
+50
+67
+52
+47
+74
+59
+54
+93
+79
+79
+121
+109
+121
+139
+133
+159
+147
+144
+187
+148
+150
+207
+144
+149
+217
+131
+137
+211
+116
+122
+198
+106
+110
+183
+95
+98
+167
+90
+91
+148
+76
+73
+116
+72
+66
+100
+65
+62
+93
+62
+62
+88
+63
+66
+85
+65
+73
+86
+76
+85
+92
+85
+96
+98
+98
+113
+110
+110
+125
+120
+118
+134
+124
+114
+127
+117
+108
+121
+111
+103
+117
+104
+95
+107
+95
+87
+95
+80
+91
+90
+70
+96
+90
+68
+99
+93
+71
+44
+45
+47
+44
+45
+47
+44
+45
+47
+44
+45
+47
+45
+45
+45
+45
+45
+45
+46
+44
+45
+46
+45
+43
+47
+46
+44
+46
+45
+43
+48
+44
+41
+48
+44
+41
+47
+43
+40
+47
+43
+40
+47
+43
+40
+47
+43
+40
+46
+42
+41
+46
+42
+41
+46
+42
+41
+46
+42
+41
+47
+43
+42
+47
+43
+42
+47
+43
+42
+47
+43
+42
+47
+43
+42
+47
+43
+42
+47
+43
+42
+47
+43
+42
+47
+43
+42
+47
+43
+42
+47
+43
+42
+47
+43
+42
+47
+43
+42
+47
+43
+42
+47
+43
+42
+48
+44
+43
+48
+44
+43
+48
+44
+43
+49
+45
+44
+49
+45
+44
+49
+45
+44
+49
+45
+44
+49
+45
+44
+49
+45
+44
+49
+45
+44
+49
+45
+44
+49
+45
+44
+49
+45
+44
+48
+44
+43
+48
+44
+41
+49
+45
+42
+50
+46
+43
+51
+47
+44
+51
+47
+44
+50
+46
+43
+50
+46
+43
+50
+46
+43
+50
+46
+43
+50
+46
+43
+50
+46
+43
+51
+47
+44
+52
+48
+45
+53
+49
+46
+54
+50
+47
+56
+48
+46
+57
+49
+46
+58
+50
+47
+59
+52
+46
+61
+52
+47
+62
+53
+48
+62
+53
+48
+61
+52
+45
+63
+52
+46
+63
+52
+46
+65
+52
+46
+66
+53
+45
+67
+54
+46
+69
+56
+48
+71
+58
+50
+72
+59
+51
+72
+62
+53
+72
+62
+53
+76
+61
+54
+79
+62
+54
+81
+61
+52
+86
+59
+50
+90
+57
+48
+95
+55
+47
+104
+55
+48
+112
+55
+46
+119
+55
+45
+129
+57
+45
+137
+57
+46
+144
+60
+49
+150
+60
+49
+155
+61
+49
+162
+64
+51
+167
+65
+51
+172
+66
+53
+180
+68
+56
+190
+69
+58
+201
+70
+60
+212
+69
+61
+219
+68
+61
+223
+68
+64
+224
+69
+64
+222
+70
+65
+212
+71
+62
+196
+70
+56
+178
+67
+50
+165
+66
+45
+158
+66
+45
+159
+67
+46
+158
+66
+45
+159
+64
+46
+158
+63
+45
+158
+63
+45
+158
+63
+45
+158
+62
+46
+158
+62
+46
+154
+61
+44
+153
+62
+44
+150
+61
+45
+148
+61
+44
+144
+61
+43
+143
+62
+43
+140
+62
+42
+140
+61
+44
+139
+60
+43
+138
+61
+43
+137
+60
+44
+137
+60
+44
+137
+60
+44
+135
+59
+43
+135
+59
+45
+133
+60
+45
+134
+60
+47
+133
+61
+47
+133
+61
+49
+131
+61
+49
+132
+62
+50
+134
+64
+54
+135
+65
+55
+136
+66
+54
+147
+71
+57
+151
+69
+55
+163
+71
+60
+175
+74
+64
+184
+73
+66
+184
+71
+65
+183
+76
+70
+179
+84
+78
+177
+100
+92
+170
+113
+102
+159
+126
+111
+144
+127
+111
+127
+124
+109
+109
+115
+101
+90
+102
+90
+78
+88
+77
+76
+78
+65
+75
+73
+61
+69
+67
+55
+64
+61
+52
+61
+58
+49
+56
+56
+46
+52
+52
+44
+49
+49
+41
+50
+51
+45
+50
+51
+45
+48
+51
+44
+47
+50
+43
+47
+49
+44
+46
+48
+43
+46
+48
+43
+46
+48
+43
+47
+49
+46
+45
+50
+46
+47
+49
+46
+47
+49
+46
+47
+49
+46
+47
+49
+46
+47
+49
+46
+47
+49
+46
+48
+50
+47
+48
+50
+47
+49
+49
+47
+49
+49
+47
+49
+49
+47
+49
+49
+47
+49
+49
+47
+50
+48
+49
+53
+43
+52
+57
+45
+55
+60
+50
+51
+63
+53
+51
+72
+63
+58
+94
+86
+84
+120
+114
+124
+138
+136
+158
+147
+147
+185
+148
+151
+202
+144
+150
+212
+132
+139
+207
+121
+129
+194
+113
+121
+184
+107
+116
+173
+104
+110
+158
+92
+95
+128
+88
+90
+113
+83
+85
+106
+82
+87
+106
+84
+94
+104
+90
+103
+109
+102
+118
+118
+114
+130
+127
+116
+136
+127
+126
+146
+135
+131
+149
+137
+126
+142
+129
+118
+134
+121
+114
+128
+113
+102
+116
+101
+90
+101
+84
+89
+88
+67
+94
+88
+62
+97
+91
+67
+44
+45
+47
+44
+45
+47
+44
+45
+47
+44
+45
+47
+44
+45
+47
+44
+46
+45
+45
+45
+45
+45
+45
+45
+46
+45
+43
+46
+45
+43
+46
+45
+43
+45
+44
+42
+47
+43
+40
+46
+42
+39
+46
+42
+39
+46
+42
+39
+44
+43
+41
+44
+42
+43
+44
+42
+43
+44
+42
+43
+43
+41
+42
+43
+41
+42
+43
+41
+42
+43
+41
+42
+45
+43
+44
+45
+43
+44
+45
+43
+44
+45
+43
+44
+45
+43
+44
+45
+43
+44
+45
+43
+44
+45
+43
+44
+44
+42
+43
+44
+42
+43
+45
+43
+44
+45
+43
+44
+45
+43
+44
+46
+44
+45
+46
+44
+45
+46
+44
+45
+46
+44
+45
+46
+44
+45
+46
+44
+45
+47
+45
+46
+47
+45
+46
+47
+45
+46
+47
+45
+46
+47
+46
+44
+48
+44
+43
+48
+44
+43
+49
+45
+44
+50
+46
+45
+50
+46
+45
+50
+46
+45
+50
+46
+45
+49
+45
+44
+49
+45
+44
+49
+45
+44
+49
+45
+44
+49
+45
+44
+50
+46
+45
+51
+47
+46
+52
+48
+47
+53
+49
+46
+56
+48
+46
+57
+49
+46
+58
+50
+47
+59
+51
+48
+61
+51
+49
+61
+52
+47
+61
+52
+47
+61
+52
+47
+63
+52
+48
+63
+52
+46
+65
+52
+46
+65
+52
+46
+67
+54
+48
+68
+55
+49
+70
+57
+51
+71
+58
+52
+72
+59
+53
+74
+59
+54
+75
+60
+55
+78
+61
+54
+80
+59
+54
+83
+58
+53
+86
+55
+50
+91
+54
+46
+99
+54
+48
+107
+54
+46
+116
+53
+44
+125
+55
+47
+135
+57
+47
+141
+59
+48
+148
+60
+48
+150
+60
+49
+157
+63
+51
+160
+64
+52
+162
+64
+51
+168
+64
+51
+177
+67
+54
+186
+68
+56
+197
+69
+58
+205
+68
+58
+213
+70
+64
+215
+72
+64
+212
+73
+66
+204
+73
+63
+190
+69
+58
+174
+67
+51
+161
+66
+46
+156
+65
+46
+157
+66
+47
+156
+65
+46
+156
+63
+46
+155
+62
+45
+155
+62
+45
+155
+62
+45
+155
+62
+47
+155
+63
+48
+152
+60
+45
+150
+61
+45
+148
+60
+46
+147
+61
+46
+143
+62
+45
+140
+61
+44
+139
+60
+43
+138
+61
+43
+137
+60
+42
+137
+60
+42
+137
+60
+44
+135
+59
+43
+135
+59
+45
+133
+60
+45
+132
+58
+45
+131
+59
+45
+132
+60
+48
+130
+60
+48
+130
+60
+50
+130
+62
+51
+131
+63
+52
+133
+65
+56
+135
+67
+58
+136
+68
+57
+148
+74
+61
+151
+72
+59
+160
+72
+62
+172
+75
+68
+178
+75
+70
+179
+76
+71
+178
+83
+77
+174
+96
+86
+173
+115
+103
+166
+129
+113
+157
+140
+122
+145
+142
+123
+130
+137
+119
+115
+128
+111
+99
+113
+98
+88
+99
+85
+78
+82
+68
+77
+78
+64
+72
+73
+59
+68
+68
+56
+64
+64
+52
+57
+59
+46
+52
+54
+43
+47
+49
+38
+48
+49
+41
+48
+49
+41
+47
+48
+42
+47
+48
+42
+46
+47
+42
+46
+47
+42
+47
+47
+45
+47
+47
+45
+47
+47
+45
+46
+48
+45
+47
+47
+45
+47
+47
+45
+47
+47
+45
+47
+47
+45
+47
+47
+45
+47
+47
+45
+48
+48
+46
+48
+48
+46
+48
+48
+46
+48
+48
+46
+48
+48
+46
+48
+48
+46
+48
+48
+46
+49
+47
+50
+54
+43
+57
+55
+43
+57
+56
+47
+52
+59
+54
+51
+72
+69
+62
+95
+94
+89
+122
+122
+124
+139
+141
+154
+144
+148
+177
+146
+151
+191
+143
+149
+199
+132
+142
+195
+125
+137
+187
+123
+137
+182
+124
+139
+178
+125
+140
+171
+125
+136
+154
+119
+131
+143
+113
+126
+135
+110
+125
+130
+110
+126
+126
+111
+130
+126
+121
+142
+133
+131
+153
+141
+139
+161
+148
+145
+168
+152
+144
+165
+148
+136
+157
+138
+131
+150
+131
+124
+141
+123
+106
+123
+105
+92
+104
+84
+86
+86
+62
+91
+87
+58
+93
+89
+62
+45
+46
+48
+45
+46
+48
+45
+46
+48
+45
+46
+48
+45
+46
+48
+45
+46
+48
+46
+46
+46
+46
+46
+46
+46
+45
+43
+46
+45
+43
+45
+44
+42
+45
+44
+42
+46
+42
+39
+46
+42
+39
+46
+42
+39
+46
+42
+41
+44
+42
+43
+43
+41
+42
+43
+41
+42
+43
+41
+42
+43
+41
+42
+42
+40
+41
+42
+40
+41
+42
+40
+41
+44
+42
+43
+44
+42
+43
+44
+42
+43
+44
+42
+43
+44
+42
+43
+44
+42
+43
+44
+42
+43
+44
+42
+43
+44
+42
+43
+44
+42
+43
+44
+42
+43
+44
+42
+43
+44
+42
+43
+45
+43
+44
+45
+43
+44
+45
+43
+44
+45
+43
+44
+46
+44
+45
+46
+44
+45
+46
+44
+45
+46
+44
+45
+47
+45
+46
+47
+45
+46
+47
+45
+46
+47
+43
+42
+48
+44
+43
+49
+45
+44
+49
+45
+44
+49
+45
+44
+49
+45
+44
+48
+44
+43
+48
+44
+43
+48
+44
+43
+48
+44
+43
+48
+44
+43
+48
+44
+43
+49
+45
+44
+50
+46
+45
+51
+47
+46
+52
+48
+47
+57
+49
+47
+58
+50
+48
+59
+51
+49
+60
+52
+49
+61
+51
+49
+61
+51
+49
+61
+51
+49
+61
+52
+47
+62
+51
+47
+62
+51
+47
+64
+50
+47
+64
+51
+45
+65
+52
+46
+67
+54
+48
+68
+55
+49
+69
+56
+50
+70
+57
+51
+72
+57
+52
+73
+58
+53
+74
+59
+54
+76
+58
+54
+78
+57
+52
+81
+56
+51
+84
+53
+48
+94
+55
+50
+101
+54
+48
+111
+54
+47
+120
+56
+47
+130
+57
+48
+138
+58
+47
+144
+60
+49
+148
+62
+49
+153
+63
+52
+155
+63
+52
+155
+63
+50
+159
+63
+49
+165
+65
+50
+174
+66
+53
+184
+68
+55
+191
+69
+58
+199
+71
+62
+203
+72
+64
+202
+74
+65
+195
+73
+62
+182
+70
+58
+170
+66
+53
+158
+65
+48
+153
+64
+46
+153
+65
+45
+153
+65
+45
+152
+63
+45
+151
+62
+44
+151
+62
+44
+153
+62
+44
+153
+61
+46
+151
+62
+46
+149
+60
+44
+148
+61
+44
+147
+61
+46
+144
+61
+45
+142
+61
+44
+138
+61
+43
+138
+61
+45
+137
+60
+44
+136
+59
+41
+136
+59
+41
+135
+59
+43
+135
+59
+43
+132
+59
+44
+132
+59
+44
+131
+59
+45
+128
+59
+44
+129
+59
+47
+128
+60
+49
+128
+60
+49
+129
+62
+53
+131
+64
+55
+131
+67
+58
+135
+68
+60
+136
+69
+60
+148
+76
+64
+150
+72
+60
+158
+71
+62
+167
+74
+67
+174
+76
+73
+174
+81
+76
+173
+93
+86
+170
+106
+94
+167
+128
+111
+161
+143
+121
+154
+154
+130
+143
+155
+131
+134
+149
+128
+122
+139
+120
+109
+123
+106
+98
+109
+93
+83
+90
+74
+81
+85
+70
+75
+79
+64
+69
+73
+58
+64
+68
+54
+59
+61
+48
+53
+55
+44
+49
+51
+40
+48
+49
+41
+47
+48
+40
+46
+47
+41
+46
+45
+40
+46
+45
+41
+46
+45
+41
+47
+46
+44
+48
+47
+45
+47
+46
+44
+47
+46
+44
+47
+46
+44
+47
+46
+44
+47
+46
+44
+46
+46
+44
+47
+46
+44
+46
+46
+44
+48
+47
+45
+47
+47
+45
+48
+47
+45
+47
+47
+45
+47
+47
+45
+47
+47
+45
+47
+47
+45
+50
+45
+49
+55
+44
+58
+54
+42
+56
+51
+45
+49
+57
+54
+49
+72
+74
+63
+98
+102
+88
+123
+128
+122
+139
+144
+147
+141
+147
+163
+143
+150
+176
+140
+149
+182
+131
+144
+178
+129
+144
+175
+133
+153
+178
+141
+164
+182
+146
+168
+179
+147
+168
+171
+144
+164
+163
+140
+160
+158
+135
+158
+152
+130
+153
+143
+125
+152
+137
+129
+156
+139
+136
+163
+144
+148
+176
+154
+152
+177
+155
+148
+173
+151
+139
+163
+141
+133
+155
+132
+127
+146
+124
+107
+124
+105
+88
+102
+79
+83
+86
+59
+89
+85
+56
+90
+86
+57
+43
+47
+50
+43
+47
+50
+43
+47
+50
+43
+47
+50
+45
+46
+48
+45
+46
+48
+46
+46
+46
+46
+46
+46
+45
+45
+45
+45
+45
+45
+46
+45
+43
+45
+44
+42
+45
+44
+42
+44
+43
+41
+44
+43
+41
+44
+43
+41
+44
+42
+43
+44
+42
+43
+44
+42
+43
+43
+41
+42
+43
+41
+42
+42
+40
+41
+42
+40
+41
+42
+40
+41
+44
+42
+43
+44
+42
+43
+44
+42
+43
+44
+42
+43
+44
+42
+43
+44
+42
+43
+44
+42
+43
+44
+42
+43
+44
+42
+43
+44
+42
+43
+44
+42
+43
+44
+42
+43
+44
+42
+43
+43
+41
+42
+43
+41
+42
+43
+41
+42
+44
+42
+43
+45
+43
+44
+45
+43
+44
+46
+44
+45
+46
+44
+45
+47
+45
+46
+47
+45
+46
+47
+45
+46
+47
+43
+42
+48
+44
+43
+48
+44
+43
+48
+44
+43
+48
+44
+43
+48
+44
+43
+47
+43
+42
+46
+42
+41
+47
+43
+42
+47
+43
+42
+47
+43
+42
+47
+43
+42
+48
+44
+43
+49
+45
+44
+51
+47
+46
+52
+48
+47
+57
+48
+49
+58
+50
+48
+59
+51
+49
+60
+52
+50
+61
+51
+50
+61
+51
+49
+60
+50
+48
+60
+50
+48
+61
+50
+48
+61
+50
+46
+63
+49
+46
+63
+49
+46
+64
+50
+47
+65
+51
+48
+66
+53
+47
+67
+54
+48
+68
+54
+51
+67
+56
+52
+68
+57
+53
+69
+58
+54
+71
+57
+54
+72
+57
+52
+75
+56
+52
+78
+53
+48
+88
+55
+50
+95
+54
+48
+105
+55
+48
+114
+55
+47
+125
+58
+49
+134
+60
+49
+140
+62
+50
+144
+62
+50
+151
+64
+54
+151
+63
+53
+151
+63
+53
+151
+63
+51
+156
+64
+51
+163
+67
+53
+171
+67
+54
+179
+69
+56
+186
+69
+59
+189
+71
+61
+190
+72
+62
+185
+71
+61
+176
+68
+56
+166
+65
+53
+155
+63
+48
+151
+64
+47
+151
+64
+45
+151
+64
+45
+150
+63
+46
+149
+62
+45
+148
+61
+44
+149
+60
+44
+150
+61
+47
+150
+61
+47
+149
+60
+46
+147
+59
+45
+146
+60
+47
+142
+60
+46
+139
+60
+45
+137
+60
+44
+137
+60
+44
+136
+60
+44
+135
+59
+43
+134
+58
+42
+134
+58
+42
+134
+58
+42
+131
+58
+43
+131
+58
+43
+130
+58
+44
+128
+58
+46
+128
+58
+48
+128
+60
+49
+128
+61
+52
+127
+63
+54
+130
+66
+57
+131
+68
+61
+135
+70
+64
+136
+72
+63
+145
+75
+65
+146
+72
+61
+154
+71
+63
+163
+76
+69
+168
+80
+76
+168
+88
+81
+169
+102
+93
+166
+118
+104
+162
+140
+119
+155
+153
+128
+149
+164
+135
+140
+163
+135
+134
+157
+131
+126
+145
+125
+116
+130
+113
+106
+117
+101
+92
+101
+82
+86
+95
+76
+78
+85
+67
+69
+76
+58
+63
+70
+54
+60
+64
+50
+55
+58
+47
+54
+56
+45
+48
+49
+41
+48
+48
+40
+46
+45
+40
+47
+44
+39
+47
+43
+40
+47
+43
+42
+49
+45
+44
+50
+46
+45
+49
+45
+44
+49
+45
+44
+49
+45
+44
+49
+45
+44
+49
+45
+44
+47
+46
+44
+49
+45
+44
+47
+46
+44
+50
+46
+45
+48
+47
+45
+50
+46
+45
+48
+47
+45
+48
+47
+45
+48
+47
+45
+48
+47
+45
+50
+45
+49
+56
+44
+58
+53
+41
+53
+49
+43
+43
+54
+54
+44
+71
+76
+56
+96
+104
+81
+122
+131
+112
+136
+146
+135
+141
+151
+150
+143
+154
+160
+141
+153
+165
+134
+150
+163
+135
+155
+162
+144
+170
+169
+155
+185
+177
+160
+192
+179
+152
+183
+168
+154
+182
+167
+155
+183
+168
+152
+183
+165
+145
+177
+156
+137
+171
+146
+137
+171
+144
+144
+177
+148
+146
+179
+150
+149
+180
+149
+144
+173
+143
+136
+162
+133
+132
+155
+129
+123
+146
+120
+103
+122
+100
+84
+98
+73
+81
+84
+57
+85
+84
+56
+86
+85
+57
+44
+48
+51
+44
+48
+51
+44
+48
+51
+44
+48
+51
+46
+47
+49
+46
+47
+49
+47
+47
+47
+47
+47
+47
+46
+46
+46
+46
+46
+46
+47
+46
+44
+46
+45
+43
+46
+45
+43
+46
+45
+43
+45
+44
+42
+45
+44
+42
+45
+43
+44
+45
+43
+44
+45
+43
+44
+44
+42
+43
+43
+41
+42
+42
+40
+41
+42
+40
+41
+42
+40
+41
+43
+41
+42
+43
+41
+42
+43
+41
+42
+43
+41
+42
+43
+41
+42
+43
+41
+42
+43
+41
+42
+43
+41
+42
+44
+42
+43
+44
+42
+43
+43
+41
+42
+43
+41
+42
+43
+41
+42
+42
+40
+41
+42
+40
+41
+42
+40
+41
+44
+42
+43
+44
+42
+43
+44
+42
+43
+45
+43
+44
+46
+44
+45
+46
+44
+45
+47
+45
+46
+47
+45
+46
+47
+43
+42
+47
+43
+42
+48
+44
+43
+48
+44
+43
+47
+43
+42
+47
+43
+42
+46
+42
+41
+45
+41
+40
+48
+44
+43
+48
+44
+43
+47
+43
+42
+48
+44
+43
+49
+45
+44
+50
+46
+45
+51
+47
+46
+52
+48
+47
+58
+49
+50
+58
+49
+50
+59
+51
+49
+60
+52
+50
+61
+51
+50
+60
+50
+49
+60
+50
+48
+59
+49
+47
+61
+50
+48
+60
+49
+47
+62
+48
+45
+62
+48
+45
+63
+49
+46
+64
+50
+47
+65
+52
+46
+63
+52
+46
+64
+53
+49
+64
+55
+50
+64
+57
+51
+65
+58
+52
+66
+57
+52
+67
+56
+52
+70
+55
+52
+72
+53
+47
+81
+53
+49
+88
+53
+47
+97
+54
+47
+108
+56
+45
+117
+57
+46
+128
+60
+47
+134
+62
+48
+139
+61
+49
+147
+63
+53
+149
+62
+53
+147
+63
+53
+147
+63
+52
+149
+66
+52
+154
+66
+52
+160
+67
+52
+165
+68
+52
+172
+66
+53
+176
+68
+56
+180
+69
+58
+177
+69
+59
+170
+66
+55
+161
+63
+52
+154
+62
+49
+150
+62
+48
+149
+63
+46
+148
+63
+43
+147
+61
+44
+147
+61
+44
+147
+60
+43
+147
+60
+43
+148
+60
+46
+148
+60
+46
+147
+59
+45
+146
+60
+45
+143
+60
+46
+141
+59
+45
+138
+59
+44
+137
+60
+44
+135
+59
+43
+135
+59
+43
+134
+58
+42
+134
+58
+42
+133
+57
+41
+131
+58
+41
+131
+58
+43
+129
+57
+42
+127
+57
+45
+127
+57
+45
+128
+60
+49
+127
+60
+51
+127
+63
+54
+128
+65
+56
+130
+67
+60
+133
+70
+63
+136
+73
+66
+138
+73
+67
+142
+74
+65
+144
+71
+62
+151
+72
+67
+159
+78
+74
+167
+86
+82
+167
+96
+90
+169
+112
+101
+164
+131
+114
+156
+148
+125
+150
+161
+131
+143
+168
+138
+136
+167
+136
+131
+160
+132
+126
+150
+126
+121
+136
+117
+112
+123
+106
+100
+112
+92
+93
+105
+83
+82
+94
+74
+74
+83
+64
+66
+75
+58
+62
+69
+53
+58
+64
+50
+57
+60
+49
+51
+52
+44
+50
+50
+42
+49
+46
+41
+47
+44
+39
+47
+41
+41
+48
+42
+42
+49
+43
+43
+50
+44
+44
+49
+43
+43
+49
+43
+43
+49
+43
+43
+49
+43
+43
+49
+43
+43
+48
+44
+43
+48
+44
+43
+48
+44
+43
+49
+45
+44
+49
+45
+44
+49
+45
+44
+49
+45
+44
+47
+46
+44
+47
+46
+44
+47
+46
+44
+50
+44
+46
+56
+42
+55
+53
+40
+49
+51
+43
+40
+53
+54
+38
+69
+75
+49
+92
+103
+71
+117
+130
+100
+134
+147
+121
+142
+155
+138
+145
+158
+148
+144
+159
+154
+139
+158
+152
+141
+165
+151
+151
+180
+158
+162
+197
+165
+169
+206
+173
+165
+201
+173
+166
+202
+176
+167
+203
+177
+164
+200
+172
+151
+190
+159
+139
+179
+145
+136
+176
+141
+141
+178
+144
+142
+178
+142
+144
+178
+143
+141
+172
+138
+132
+161
+130
+128
+153
+123
+119
+142
+114
+100
+120
+93
+81
+95
+69
+77
+81
+54
+81
+81
+53
+82
+81
+53
+44
+48
+51
+44
+48
+51
+44
+48
+51
+44
+48
+51
+46
+47
+49
+46
+47
+49
+46
+47
+49
+46
+47
+49
+47
+47
+47
+47
+47
+47
+47
+47
+47
+47
+47
+47
+47
+46
+44
+47
+46
+44
+46
+45
+43
+46
+45
+43
+47
+45
+46
+46
+44
+45
+46
+44
+45
+45
+43
+44
+44
+42
+43
+43
+41
+42
+43
+41
+42
+42
+40
+41
+43
+41
+42
+43
+41
+42
+43
+41
+42
+43
+41
+42
+43
+41
+42
+43
+41
+42
+43
+41
+42
+43
+41
+42
+43
+41
+42
+43
+41
+42
+43
+41
+42
+42
+40
+41
+42
+40
+41
+42
+40
+41
+41
+39
+40
+41
+39
+40
+43
+41
+42
+43
+41
+42
+44
+42
+43
+45
+43
+44
+46
+44
+45
+46
+44
+45
+47
+45
+46
+47
+45
+46
+47
+43
+42
+47
+43
+42
+47
+43
+42
+47
+43
+42
+47
+43
+42
+46
+42
+41
+45
+41
+40
+44
+40
+39
+48
+44
+43
+48
+44
+43
+48
+44
+43
+48
+44
+43
+49
+45
+44
+50
+46
+45
+52
+48
+47
+52
+48
+47
+58
+49
+50
+59
+50
+51
+59
+50
+51
+60
+51
+52
+61
+51
+50
+60
+50
+49
+60
+50
+49
+59
+49
+48
+60
+49
+47
+60
+49
+47
+62
+48
+47
+61
+47
+46
+62
+48
+45
+62
+48
+45
+63
+49
+46
+62
+51
+47
+61
+54
+48
+59
+54
+48
+59
+56
+51
+60
+57
+52
+61
+58
+53
+62
+57
+51
+64
+55
+50
+67
+54
+48
+71
+52
+46
+79
+52
+43
+89
+52
+43
+100
+53
+43
+110
+56
+44
+120
+58
+45
+127
+59
+46
+133
+59
+46
+143
+60
+52
+145
+60
+53
+144
+62
+51
+143
+64
+51
+144
+65
+50
+147
+66
+49
+151
+65
+50
+153
+64
+48
+160
+62
+49
+166
+64
+52
+170
+66
+55
+170
+66
+57
+165
+64
+54
+159
+62
+53
+151
+61
+50
+149
+63
+50
+146
+63
+45
+146
+63
+45
+145
+62
+44
+144
+61
+43
+145
+59
+42
+145
+59
+42
+146
+60
+45
+146
+60
+45
+145
+59
+46
+145
+59
+46
+142
+59
+45
+141
+59
+45
+138
+59
+46
+136
+58
+45
+134
+58
+44
+132
+59
+44
+133
+57
+41
+133
+57
+41
+131
+58
+41
+130
+57
+40
+130
+57
+42
+129
+57
+42
+126
+56
+44
+126
+56
+44
+128
+60
+49
+128
+61
+52
+128
+64
+55
+129
+66
+57
+132
+69
+62
+133
+73
+65
+136
+75
+70
+140
+77
+70
+140
+73
+65
+142
+72
+64
+152
+74
+70
+161
+83
+79
+168
+93
+88
+169
+104
+98
+169
+123
+110
+164
+142
+121
+153
+156
+129
+146
+167
+134
+137
+172
+139
+130
+170
+136
+128
+161
+132
+127
+153
+128
+126
+139
+119
+120
+129
+110
+106
+120
+97
+100
+114
+91
+90
+104
+81
+81
+93
+73
+73
+84
+67
+67
+76
+59
+62
+68
+54
+60
+63
+52
+54
+55
+47
+52
+52
+44
+51
+48
+43
+48
+43
+39
+49
+40
+41
+49
+40
+41
+50
+41
+42
+52
+43
+44
+50
+41
+42
+50
+41
+42
+50
+41
+42
+50
+41
+42
+50
+41
+42
+48
+42
+42
+48
+42
+42
+48
+42
+42
+49
+43
+43
+49
+43
+43
+48
+44
+43
+48
+44
+43
+48
+44
+43
+48
+44
+43
+48
+44
+43
+49
+43
+45
+54
+41
+50
+53
+41
+45
+52
+45
+37
+52
+54
+33
+65
+72
+38
+87
+99
+59
+113
+128
+87
+130
+146
+109
+141
+156
+125
+144
+160
+134
+144
+162
+140
+139
+161
+138
+141
+168
+137
+149
+184
+142
+160
+200
+148
+164
+208
+157
+169
+211
+171
+168
+210
+174
+167
+209
+173
+161
+203
+165
+147
+189
+151
+133
+175
+135
+130
+172
+132
+135
+176
+134
+136
+174
+133
+140
+177
+136
+139
+171
+134
+129
+159
+123
+123
+148
+116
+113
+136
+107
+95
+115
+87
+77
+93
+66
+73
+79
+51
+74
+77
+48
+76
+76
+48
+46
+47
+49
+44
+48
+49
+46
+47
+49
+46
+47
+49
+46
+48
+47
+46
+48
+47
+46
+48
+47
+47
+47
+47
+48
+48
+46
+48
+48
+46
+48
+48
+46
+48
+47
+45
+48
+47
+45
+48
+47
+43
+47
+46
+44
+49
+45
+44
+50
+46
+45
+49
+45
+44
+49
+45
+44
+48
+44
+43
+47
+43
+44
+44
+42
+43
+43
+41
+42
+43
+41
+42
+43
+41
+42
+43
+41
+42
+43
+41
+42
+43
+41
+42
+43
+41
+42
+43
+41
+42
+43
+41
+44
+43
+41
+42
+43
+41
+44
+43
+41
+42
+45
+40
+44
+42
+40
+41
+44
+40
+41
+41
+39
+40
+41
+39
+40
+40
+38
+39
+42
+40
+41
+43
+41
+42
+44
+42
+43
+44
+43
+41
+45
+43
+44
+46
+45
+43
+47
+46
+44
+47
+46
+44
+45
+44
+42
+45
+44
+42
+47
+43
+42
+47
+43
+42
+46
+42
+41
+45
+41
+40
+44
+40
+39
+44
+40
+39
+49
+45
+44
+50
+45
+42
+50
+45
+42
+50
+45
+42
+51
+46
+43
+52
+47
+44
+53
+48
+45
+54
+49
+46
+59
+51
+49
+59
+51
+49
+60
+52
+50
+60
+52
+50
+61
+51
+49
+60
+50
+48
+59
+49
+47
+59
+49
+47
+60
+49
+47
+60
+49
+47
+61
+47
+46
+61
+47
+46
+61
+47
+44
+62
+48
+45
+63
+49
+46
+61
+50
+46
+62
+51
+45
+61
+54
+46
+60
+55
+49
+57
+57
+49
+57
+58
+50
+58
+58
+50
+59
+56
+49
+63
+54
+47
+67
+50
+43
+74
+49
+44
+84
+50
+41
+94
+51
+42
+104
+54
+43
+111
+57
+45
+118
+60
+46
+123
+59
+47
+135
+61
+50
+139
+61
+51
+139
+63
+50
+140
+64
+50
+142
+64
+51
+143
+64
+49
+146
+63
+49
+149
+61
+47
+152
+60
+47
+156
+62
+50
+162
+66
+54
+161
+67
+55
+158
+66
+55
+153
+63
+52
+150
+62
+50
+148
+62
+49
+148
+62
+47
+147
+61
+46
+144
+61
+45
+142
+61
+44
+142
+61
+44
+140
+61
+44
+140
+61
+46
+141
+62
+47
+142
+60
+46
+142
+60
+46
+139
+60
+47
+138
+59
+46
+136
+58
+45
+135
+59
+45
+132
+59
+44
+132
+59
+44
+130
+58
+43
+128
+59
+43
+127
+58
+42
+126
+59
+42
+126
+59
+43
+124
+58
+42
+124
+58
+44
+124
+58
+46
+128
+62
+50
+129
+62
+53
+128
+64
+54
+130
+67
+58
+133
+70
+61
+133
+74
+66
+136
+77
+69
+139
+79
+71
+140
+73
+67
+142
+73
+68
+147
+80
+74
+152
+92
+84
+157
+104
+96
+157
+117
+105
+158
+135
+117
+157
+153
+128
+147
+162
+133
+143
+170
+137
+137
+172
+139
+129
+169
+135
+127
+162
+132
+125
+155
+127
+122
+144
+121
+116
+136
+111
+103
+126
+98
+98
+121
+93
+92
+112
+85
+85
+103
+79
+78
+93
+72
+71
+82
+65
+64
+73
+56
+61
+65
+51
+56
+56
+46
+56
+53
+46
+53
+48
+44
+51
+43
+41
+50
+40
+41
+50
+40
+41
+51
+41
+42
+52
+42
+43
+50
+41
+44
+48
+42
+42
+48
+42
+44
+50
+41
+42
+50
+41
+44
+50
+41
+44
+50
+41
+44
+50
+41
+44
+51
+42
+45
+51
+42
+45
+49
+43
+45
+49
+43
+45
+48
+44
+45
+48
+44
+45
+48
+44
+45
+49
+43
+47
+52
+41
+47
+52
+42
+43
+52
+45
+37
+52
+54
+33
+63
+70
+37
+84
+96
+56
+109
+124
+81
+129
+144
+103
+137
+153
+116
+141
+158
+122
+141
+161
+126
+136
+161
+122
+138
+167
+123
+145
+182
+130
+155
+196
+136
+159
+203
+144
+159
+201
+153
+158
+199
+157
+157
+198
+154
+152
+193
+149
+140
+183
+138
+130
+173
+128
+133
+174
+130
+140
+181
+137
+132
+171
+127
+137
+174
+133
+137
+169
+130
+126
+156
+120
+118
+143
+111
+108
+131
+102
+90
+110
+83
+74
+90
+63
+70
+76
+50
+70
+74
+47
+70
+72
+48
+47
+48
+43
+46
+48
+43
+47
+48
+43
+48
+49
+44
+48
+49
+44
+48
+49
+44
+49
+50
+45
+50
+49
+45
+51
+50
+46
+52
+51
+47
+52
+51
+47
+54
+50
+47
+53
+49
+46
+52
+49
+44
+51
+47
+44
+52
+47
+44
+53
+48
+45
+53
+48
+45
+52
+47
+44
+51
+46
+43
+50
+44
+44
+49
+45
+44
+48
+44
+43
+48
+44
+43
+46
+44
+45
+46
+44
+45
+45
+45
+47
+45
+45
+47
+44
+44
+46
+43
+43
+45
+42
+41
+46
+41
+41
+43
+46
+41
+47
+46
+41
+45
+47
+40
+47
+46
+41
+45
+47
+41
+45
+46
+41
+45
+46
+42
+43
+46
+42
+43
+47
+43
+42
+47
+43
+42
+45
+44
+42
+46
+45
+41
+45
+45
+43
+45
+46
+41
+46
+47
+42
+46
+47
+42
+45
+45
+45
+45
+45
+45
+46
+44
+45
+47
+45
+46
+47
+46
+44
+48
+47
+45
+50
+46
+43
+50
+46
+43
+50
+45
+42
+52
+44
+41
+53
+45
+42
+54
+46
+43
+56
+47
+42
+58
+49
+44
+58
+49
+42
+59
+50
+43
+61
+52
+45
+61
+52
+45
+62
+53
+48
+62
+53
+48
+62
+53
+48
+61
+52
+47
+60
+51
+46
+59
+50
+45
+61
+50
+46
+60
+49
+45
+60
+49
+47
+59
+48
+46
+61
+47
+46
+62
+48
+47
+62
+48
+47
+64
+49
+46
+66
+47
+41
+66
+49
+41
+60
+51
+42
+57
+54
+45
+53
+56
+45
+52
+55
+46
+54
+54
+46
+59
+50
+45
+64
+45
+41
+71
+41
+39
+79
+39
+39
+86
+41
+38
+91
+46
+40
+97
+53
+44
+102
+60
+48
+109
+63
+48
+121
+65
+48
+127
+64
+47
+134
+65
+49
+139
+66
+51
+143
+64
+51
+147
+61
+48
+147
+59
+47
+146
+56
+45
+147
+59
+47
+147
+61
+46
+148
+65
+49
+149
+66
+50
+148
+67
+50
+146
+65
+48
+145
+62
+46
+145
+59
+44
+151
+59
+48
+151
+58
+50
+146
+59
+49
+140
+61
+48
+136
+63
+48
+132
+63
+47
+130
+63
+46
+130
+63
+46
+136
+64
+49
+136
+63
+48
+138
+62
+49
+137
+61
+48
+136
+60
+47
+135
+59
+46
+132
+58
+45
+131
+59
+45
+123
+57
+43
+126
+64
+51
+118
+60
+46
+112
+56
+41
+118
+62
+45
+118
+62
+45
+118
+59
+45
+125
+63
+50
+125
+59
+47
+131
+63
+52
+136
+68
+57
+139
+72
+63
+138
+76
+65
+135
+77
+66
+133
+79
+67
+135
+78
+69
+144
+76
+73
+149
+84
+80
+147
+99
+89
+142
+113
+97
+138
+125
+106
+134
+138
+113
+135
+151
+124
+136
+159
+130
+139
+166
+135
+138
+167
+137
+139
+168
+138
+138
+168
+140
+132
+165
+136
+124
+161
+130
+114
+155
+123
+110
+151
+117
+104
+142
+105
+97
+133
+95
+91
+122
+88
+89
+116
+85
+90
+110
+83
+86
+101
+78
+79
+88
+69
+73
+75
+61
+66
+63
+54
+64
+57
+51
+58
+48
+46
+53
+43
+42
+51
+39
+41
+51
+39
+43
+51
+39
+43
+49
+38
+42
+47
+41
+45
+45
+41
+42
+45
+40
+44
+45
+39
+41
+47
+38
+43
+49
+38
+44
+51
+38
+45
+51
+38
+45
+52
+39
+46
+52
+39
+46
+51
+40
+48
+50
+40
+48
+48
+41
+49
+47
+42
+49
+47
+42
+49
+47
+42
+48
+47
+41
+45
+49
+43
+43
+48
+45
+40
+47
+47
+35
+60
+63
+42
+86
+92
+64
+112
+122
+88
+127
+139
+103
+141
+156
+117
+139
+157
+115
+140
+161
+118
+140
+166
+119
+138
+168
+118
+137
+170
+117
+142
+180
+123
+153
+191
+134
+159
+193
+143
+157
+190
+143
+150
+186
+138
+143
+179
+131
+136
+174
+125
+133
+171
+124
+131
+170
+123
+133
+170
+126
+131
+168
+125
+131
+166
+126
+128
+158
+124
+121
+148
+117
+114
+137
+109
+104
+124
+99
+89
+107
+85
+77
+90
+70
+74
+82
+61
+68
+73
+51
+62
+65
+46
+47
+48
+42
+48
+49
+43
+48
+49
+43
+48
+49
+43
+49
+50
+44
+49
+50
+44
+50
+49
+44
+51
+50
+45
+52
+51
+46
+52
+51
+46
+55
+52
+47
+55
+52
+47
+54
+51
+46
+53
+50
+45
+53
+48
+44
+53
+48
+44
+55
+47
+44
+55
+47
+44
+54
+46
+44
+54
+46
+44
+51
+46
+43
+50
+45
+42
+48
+44
+43
+48
+44
+43
+48
+44
+45
+47
+45
+46
+47
+45
+48
+45
+45
+47
+45
+44
+49
+43
+42
+47
+41
+42
+46
+41
+40
+45
+46
+41
+47
+47
+40
+47
+47
+40
+47
+47
+40
+47
+47
+41
+45
+47
+41
+45
+46
+42
+43
+46
+42
+43
+47
+43
+42
+47
+43
+42
+46
+45
+41
+46
+45
+41
+46
+47
+42
+46
+47
+42
+46
+47
+41
+46
+47
+42
+46
+46
+46
+46
+46
+48
+46
+46
+46
+46
+46
+46
+47
+46
+44
+47
+46
+44
+49
+45
+42
+51
+46
+43
+53
+45
+42
+53
+46
+40
+55
+46
+41
+56
+47
+40
+58
+47
+41
+59
+48
+42
+60
+50
+41
+61
+51
+42
+62
+53
+44
+62
+53
+44
+62
+53
+46
+62
+53
+46
+62
+53
+46
+61
+52
+45
+60
+51
+46
+60
+51
+46
+61
+50
+46
+60
+49
+45
+59
+48
+46
+59
+48
+46
+61
+47
+46
+61
+47
+46
+62
+48
+47
+64
+49
+46
+68
+47
+42
+70
+47
+41
+67
+50
+43
+64
+51
+43
+61
+52
+45
+60
+51
+44
+59
+50
+45
+62
+48
+45
+65
+44
+43
+70
+42
+41
+75
+41
+40
+80
+42
+39
+86
+45
+41
+92
+51
+45
+97
+57
+49
+103
+61
+47
+112
+65
+47
+120
+65
+45
+128
+65
+48
+136
+64
+50
+143
+63
+52
+145
+61
+51
+147
+58
+50
+147
+59
+49
+141
+57
+46
+139
+60
+47
+139
+62
+46
+140
+64
+48
+141
+65
+49
+141
+65
+49
+142
+65
+47
+145
+63
+49
+149
+59
+50
+149
+59
+50
+144
+60
+50
+139
+61
+48
+134
+62
+48
+131
+64
+47
+129
+63
+47
+129
+64
+46
+133
+64
+49
+134
+62
+47
+135
+61
+48
+136
+60
+46
+133
+59
+46
+132
+59
+44
+130
+58
+44
+127
+60
+44
+119
+57
+44
+119
+61
+49
+112
+59
+45
+109
+57
+43
+114
+63
+46
+114
+63
+46
+113
+57
+42
+117
+58
+44
+127
+61
+49
+132
+64
+53
+138
+68
+58
+140
+72
+61
+138
+74
+64
+135
+77
+65
+133
+79
+67
+136
+77
+69
+144
+74
+72
+149
+84
+82
+145
+102
+93
+138
+119
+102
+131
+135
+112
+127
+147
+119
+128
+159
+127
+131
+166
+134
+134
+167
+136
+139
+168
+138
+143
+167
+141
+143
+167
+141
+136
+165
+137
+127
+160
+131
+117
+156
+125
+109
+153
+118
+100
+147
+105
+94
+139
+96
+89
+130
+90
+89
+123
+88
+90
+119
+88
+88
+111
+83
+82
+97
+74
+77
+86
+67
+69
+73
+59
+65
+65
+55
+59
+56
+51
+53
+48
+45
+51
+42
+43
+50
+41
+42
+49
+40
+43
+46
+40
+42
+49
+40
+43
+48
+39
+44
+48
+39
+44
+48
+39
+44
+49
+38
+44
+51
+38
+45
+52
+39
+48
+52
+39
+48
+52
+39
+48
+51
+40
+48
+50
+40
+49
+48
+41
+49
+47
+42
+49
+45
+42
+51
+44
+43
+51
+44
+43
+49
+50
+45
+49
+50
+46
+45
+48
+44
+41
+45
+45
+37
+56
+58
+44
+83
+88
+66
+111
+120
+93
+128
+139
+105
+135
+150
+111
+134
+153
+108
+134
+158
+110
+136
+163
+112
+134
+164
+112
+132
+165
+112
+138
+173
+119
+147
+182
+128
+153
+185
+135
+150
+182
+132
+147
+179
+129
+140
+174
+123
+134
+171
+120
+130
+168
+119
+130
+168
+121
+131
+168
+124
+131
+166
+124
+130
+164
+127
+127
+157
+123
+120
+146
+117
+113
+136
+110
+104
+123
+101
+89
+106
+87
+77
+90
+72
+70
+77
+59
+64
+68
+51
+59
+62
+45
+49
+50
+44
+49
+50
+44
+49
+50
+44
+49
+50
+44
+50
+51
+45
+50
+51
+45
+52
+51
+46
+52
+51
+46
+53
+52
+47
+53
+52
+47
+56
+53
+48
+56
+53
+48
+56
+53
+48
+55
+52
+47
+55
+50
+46
+54
+49
+45
+56
+48
+45
+56
+48
+45
+55
+47
+44
+54
+46
+43
+52
+47
+44
+51
+46
+43
+50
+44
+44
+49
+45
+44
+49
+45
+46
+47
+45
+46
+48
+46
+49
+47
+45
+48
+45
+45
+47
+44
+44
+46
+43
+42
+47
+43
+41
+46
+47
+40
+47
+49
+39
+47
+47
+41
+45
+47
+41
+45
+47
+41
+45
+47
+41
+45
+46
+42
+43
+46
+42
+43
+48
+44
+43
+48
+44
+43
+47
+46
+42
+47
+46
+42
+47
+46
+41
+48
+47
+42
+48
+47
+42
+48
+47
+43
+47
+47
+45
+47
+47
+47
+48
+46
+47
+48
+46
+47
+48
+47
+45
+47
+46
+44
+49
+45
+42
+50
+45
+42
+54
+46
+43
+55
+48
+42
+57
+48
+43
+58
+49
+42
+60
+49
+43
+61
+51
+42
+62
+52
+43
+63
+53
+44
+63
+54
+45
+63
+54
+45
+64
+55
+46
+64
+55
+46
+63
+54
+47
+62
+53
+46
+61
+52
+45
+61
+52
+45
+61
+50
+46
+60
+49
+45
+59
+48
+46
+59
+48
+46
+59
+48
+46
+59
+48
+46
+60
+49
+47
+63
+49
+46
+68
+49
+43
+71
+47
+43
+74
+46
+43
+76
+44
+45
+79
+43
+47
+78
+42
+46
+74
+42
+47
+71
+42
+46
+68
+44
+44
+65
+46
+42
+66
+45
+40
+70
+45
+40
+79
+46
+41
+89
+48
+42
+99
+50
+45
+105
+52
+44
+107
+58
+44
+111
+59
+45
+119
+59
+48
+129
+61
+52
+135
+60
+54
+140
+60
+53
+141
+58
+52
+141
+58
+52
+138
+60
+50
+135
+61
+50
+134
+62
+50
+133
+63
+51
+134
+65
+50
+137
+65
+51
+140
+66
+53
+143
+67
+53
+142
+63
+50
+143
+61
+47
+140
+62
+49
+138
+62
+46
+135
+62
+47
+133
+62
+44
+134
+61
+46
+134
+61
+44
+137
+59
+46
+137
+60
+44
+136
+58
+45
+134
+58
+42
+132
+59
+44
+128
+60
+41
+126
+61
+43
+122
+61
+43
+124
+62
+49
+120
+60
+49
+117
+59
+47
+116
+60
+47
+118
+65
+49
+118
+65
+49
+117
+61
+46
+118
+59
+45
+127
+63
+53
+132
+65
+56
+138
+70
+61
+140
+72
+63
+138
+74
+65
+137
+74
+65
+136
+78
+67
+140
+77
+70
+147
+73
+72
+153
+83
+81
+151
+101
+92
+146
+117
+101
+138
+132
+110
+131
+144
+116
+129
+156
+123
+130
+164
+131
+134
+168
+135
+138
+169
+137
+143
+169
+140
+145
+168
+140
+144
+164
+137
+138
+158
+131
+130
+153
+125
+122
+151
+120
+107
+149
+109
+97
+146
+101
+92
+139
+97
+92
+134
+96
+93
+130
+96
+91
+124
+93
+85
+114
+86
+80
+104
+80
+70
+89
+69
+66
+80
+63
+58
+68
+57
+51
+58
+50
+46
+51
+44
+42
+47
+41
+40
+45
+41
+43
+42
+40
+50
+38
+40
+53
+36
+42
+53
+36
+42
+53
+36
+42
+52
+37
+42
+53
+38
+43
+51
+40
+46
+51
+42
+47
+48
+42
+46
+47
+42
+46
+44
+43
+48
+43
+44
+48
+41
+45
+48
+40
+45
+49
+38
+46
+49
+40
+45
+48
+49
+47
+50
+51
+47
+46
+46
+42
+39
+42
+42
+34
+53
+55
+42
+80
+85
+65
+109
+118
+91
+124
+138
+105
+128
+144
+107
+126
+147
+106
+127
+153
+106
+131
+159
+110
+128
+160
+110
+126
+160
+109
+128
+165
+113
+135
+172
+120
+141
+175
+124
+139
+173
+122
+136
+170
+120
+132
+169
+118
+129
+167
+118
+127
+167
+117
+127
+166
+119
+127
+166
+121
+127
+164
+121
+128
+162
+125
+125
+155
+121
+119
+145
+116
+112
+135
+109
+104
+124
+99
+89
+107
+85
+77
+90
+70
+69
+73
+58
+62
+64
+50
+57
+58
+44
+50
+51
+45
+50
+51
+45
+51
+52
+46
+51
+52
+46
+51
+52
+46
+52
+53
+47
+53
+52
+47
+53
+52
+47
+54
+53
+48
+55
+54
+49
+57
+54
+49
+58
+55
+50
+58
+55
+50
+57
+54
+49
+57
+52
+48
+57
+52
+48
+58
+50
+47
+57
+49
+46
+57
+49
+46
+56
+48
+45
+53
+48
+45
+52
+47
+44
+52
+46
+46
+52
+46
+46
+51
+47
+48
+51
+47
+48
+49
+47
+48
+49
+47
+50
+48
+46
+49
+46
+46
+48
+45
+45
+47
+45
+43
+46
+48
+41
+48
+50
+41
+46
+48
+42
+46
+48
+42
+46
+48
+42
+46
+48
+42
+44
+47
+43
+44
+47
+43
+42
+49
+45
+44
+49
+45
+44
+48
+47
+43
+48
+47
+43
+49
+48
+43
+49
+48
+43
+49
+48
+43
+49
+48
+44
+49
+49
+47
+49
+49
+49
+49
+47
+48
+49
+48
+46
+49
+48
+46
+50
+46
+43
+51
+46
+43
+51
+46
+42
+57
+50
+44
+57
+50
+44
+59
+50
+43
+60
+51
+44
+62
+52
+43
+64
+54
+45
+64
+54
+45
+65
+55
+46
+66
+56
+47
+65
+56
+47
+66
+57
+48
+65
+56
+47
+65
+56
+49
+64
+55
+48
+62
+53
+46
+62
+53
+46
+61
+50
+46
+61
+50
+46
+60
+49
+47
+59
+48
+46
+59
+48
+46
+60
+49
+47
+61
+50
+48
+63
+49
+46
+66
+51
+46
+70
+49
+46
+77
+45
+46
+84
+41
+48
+88
+38
+47
+87
+37
+46
+81
+38
+47
+75
+40
+46
+68
+47
+46
+62
+49
+43
+60
+50
+41
+64
+50
+41
+72
+47
+40
+84
+47
+41
+96
+45
+42
+101
+46
+41
+105
+57
+47
+107
+59
+47
+117
+60
+51
+125
+60
+54
+133
+59
+56
+137
+59
+57
+138
+59
+55
+136
+58
+54
+137
+62
+56
+134
+64
+56
+134
+66
+57
+133
+66
+57
+133
+67
+55
+134
+66
+55
+135
+65
+55
+137
+65
+53
+137
+64
+49
+137
+64
+47
+136
+63
+46
+136
+63
+46
+135
+62
+45
+136
+60
+44
+136
+59
+43
+137
+58
+43
+138
+56
+42
+138
+56
+42
+136
+57
+42
+133
+57
+41
+130
+59
+41
+125
+60
+40
+122
+61
+40
+120
+62
+42
+127
+64
+49
+122
+55
+46
+120
+56
+46
+120
+60
+49
+117
+59
+45
+118
+62
+47
+123
+65
+51
+123
+64
+50
+128
+66
+55
+132
+68
+58
+135
+71
+61
+137
+73
+63
+136
+73
+64
+138
+75
+66
+138
+78
+68
+140
+80
+72
+144
+81
+74
+147
+90
+81
+148
+101
+91
+143
+114
+98
+137
+125
+103
+132
+136
+109
+131
+147
+118
+131
+156
+124
+135
+165
+131
+136
+167
+135
+139
+168
+137
+143
+168
+138
+143
+163
+135
+139
+158
+130
+136
+152
+126
+127
+150
+121
+114
+148
+111
+108
+146
+105
+104
+142
+103
+102
+140
+101
+103
+139
+103
+100
+134
+101
+96
+125
+95
+92
+118
+91
+81
+103
+80
+76
+93
+74
+66
+80
+63
+57
+68
+54
+50
+58
+47
+46
+52
+42
+44
+47
+40
+45
+42
+37
+53
+37
+38
+56
+35
+40
+56
+35
+40
+55
+36
+40
+52
+37
+40
+51
+39
+43
+50
+41
+44
+48
+44
+45
+44
+42
+43
+43
+43
+45
+42
+43
+45
+40
+44
+45
+39
+44
+47
+39
+44
+47
+37
+45
+47
+40
+44
+45
+46
+42
+43
+49
+43
+43
+48
+43
+39
+46
+43
+34
+56
+56
+44
+80
+85
+65
+105
+113
+89
+118
+132
+99
+123
+140
+104
+121
+143
+104
+124
+150
+105
+127
+156
+108
+125
+159
+109
+121
+158
+107
+122
+160
+109
+127
+165
+114
+130
+167
+116
+128
+165
+113
+125
+163
+112
+125
+163
+112
+125
+165
+115
+126
+165
+118
+126
+165
+120
+125
+164
+120
+124
+161
+120
+125
+159
+122
+122
+153
+119
+117
+144
+113
+110
+135
+106
+101
+124
+98
+87
+107
+82
+78
+91
+71
+69
+71
+57
+63
+61
+48
+57
+55
+42
+52
+53
+47
+52
+53
+47
+52
+53
+47
+53
+54
+48
+53
+54
+48
+53
+54
+48
+55
+54
+49
+55
+54
+49
+56
+55
+50
+56
+55
+50
+59
+56
+51
+60
+57
+52
+60
+57
+52
+60
+57
+52
+60
+55
+51
+60
+55
+51
+60
+52
+49
+60
+52
+49
+59
+51
+48
+59
+51
+48
+56
+51
+48
+55
+50
+47
+54
+49
+46
+54
+49
+46
+53
+49
+48
+54
+50
+49
+54
+50
+49
+51
+49
+50
+50
+48
+49
+49
+47
+48
+48
+46
+47
+49
+45
+46
+50
+44
+48
+52
+43
+46
+52
+43
+46
+52
+43
+46
+50
+44
+46
+50
+44
+44
+50
+44
+44
+50
+44
+44
+51
+47
+46
+51
+47
+44
+51
+47
+44
+51
+47
+44
+50
+49
+44
+50
+49
+44
+51
+50
+45
+51
+50
+46
+51
+50
+48
+51
+50
+48
+51
+50
+48
+51
+50
+48
+53
+49
+48
+53
+49
+46
+54
+49
+46
+54
+49
+45
+59
+52
+46
+60
+53
+47
+61
+52
+45
+63
+54
+45
+65
+55
+46
+66
+56
+47
+69
+56
+47
+67
+57
+47
+68
+58
+49
+68
+58
+49
+69
+59
+50
+68
+58
+49
+67
+57
+48
+66
+56
+47
+64
+53
+47
+64
+53
+47
+62
+51
+47
+62
+51
+47
+61
+50
+46
+61
+50
+46
+61
+50
+48
+61
+50
+48
+62
+51
+49
+62
+51
+49
+66
+52
+49
+70
+50
+49
+78
+48
+50
+85
+44
+52
+90
+40
+51
+89
+39
+50
+83
+40
+49
+76
+44
+49
+68
+50
+48
+60
+53
+45
+57
+55
+43
+60
+54
+42
+68
+51
+41
+78
+49
+41
+90
+47
+41
+94
+47
+41
+102
+58
+49
+106
+59
+51
+115
+60
+55
+122
+61
+58
+130
+60
+58
+134
+60
+59
+135
+59
+59
+134
+58
+58
+130
+59
+55
+129
+62
+56
+129
+65
+56
+129
+66
+57
+131
+67
+58
+131
+67
+58
+133
+64
+57
+132
+64
+55
+132
+66
+50
+132
+67
+49
+133
+64
+48
+134
+62
+47
+136
+60
+46
+137
+59
+46
+139
+57
+45
+140
+56
+45
+138
+54
+43
+137
+55
+43
+135
+56
+43
+131
+58
+43
+127
+60
+43
+122
+61
+42
+119
+62
+42
+120
+62
+42
+127
+57
+45
+122
+48
+39
+129
+56
+47
+131
+63
+52
+117
+53
+43
+113
+53
+42
+124
+66
+54
+125
+67
+55
+127
+69
+58
+129
+71
+60
+131
+73
+62
+132
+74
+63
+133
+74
+66
+135
+76
+68
+138
+79
+71
+137
+85
+74
+130
+94
+78
+129
+102
+81
+134
+109
+89
+135
+114
+93
+136
+121
+98
+137
+131
+105
+141
+144
+117
+141
+154
+124
+138
+159
+126
+136
+163
+130
+136
+167
+133
+137
+168
+134
+135
+166
+132
+132
+162
+128
+129
+156
+125
+127
+151
+119
+125
+144
+112
+125
+142
+108
+123
+140
+108
+120
+139
+107
+120
+139
+109
+117
+136
+108
+112
+131
+103
+108
+126
+100
+99
+113
+88
+92
+104
+82
+83
+90
+72
+73
+75
+61
+66
+64
+52
+61
+54
+44
+57
+47
+38
+55
+42
+36
+57
+39
+39
+57
+37
+39
+54
+38
+39
+52
+38
+38
+49
+39
+38
+46
+40
+40
+44
+43
+41
+44
+44
+42
+41
+43
+40
+41
+43
+42
+41
+43
+42
+41
+43
+42
+42
+42
+44
+42
+42
+44
+43
+41
+44
+45
+41
+42
+44
+35
+36
+50
+42
+39
+53
+48
+42
+56
+54
+42
+66
+67
+53
+85
+90
+70
+102
+112
+87
+110
+125
+94
+116
+136
+101
+113
+138
+98
+117
+144
+101
+120
+152
+105
+119
+155
+107
+115
+153
+104
+116
+154
+105
+119
+159
+107
+122
+162
+110
+120
+160
+108
+119
+159
+109
+120
+160
+110
+121
+163
+115
+123
+165
+117
+123
+165
+119
+124
+163
+119
+121
+158
+117
+122
+156
+119
+119
+150
+116
+115
+142
+111
+109
+134
+104
+100
+123
+95
+87
+107
+80
+78
+92
+69
+68
+69
+55
+62
+58
+47
+56
+52
+41
+53
+54
+48
+53
+54
+48
+54
+55
+49
+54
+55
+49
+55
+56
+50
+55
+56
+50
+56
+55
+50
+56
+55
+50
+57
+56
+51
+58
+57
+52
+61
+58
+53
+62
+59
+54
+62
+59
+54
+62
+59
+54
+62
+57
+53
+62
+57
+53
+63
+55
+52
+63
+55
+52
+62
+54
+51
+61
+53
+50
+59
+54
+51
+58
+53
+50
+57
+52
+49
+57
+52
+49
+56
+52
+49
+56
+52
+51
+57
+53
+52
+56
+52
+51
+55
+51
+50
+52
+51
+49
+53
+49
+50
+52
+48
+47
+54
+45
+48
+54
+45
+46
+54
+45
+48
+54
+45
+46
+52
+46
+46
+52
+46
+46
+52
+46
+46
+52
+47
+44
+52
+48
+45
+52
+48
+45
+52
+48
+45
+53
+49
+46
+51
+50
+45
+51
+50
+45
+52
+51
+46
+52
+51
+46
+52
+51
+47
+52
+51
+49
+53
+52
+50
+53
+52
+48
+56
+52
+49
+56
+53
+48
+57
+52
+48
+58
+53
+47
+61
+54
+48
+62
+55
+47
+64
+55
+46
+65
+56
+47
+67
+57
+48
+68
+58
+48
+71
+58
+49
+72
+59
+50
+70
+60
+51
+70
+60
+51
+70
+60
+51
+70
+60
+51
+69
+59
+50
+67
+57
+48
+66
+55
+49
+65
+54
+48
+64
+53
+49
+64
+53
+49
+63
+52
+48
+62
+51
+47
+62
+51
+49
+63
+52
+50
+64
+53
+51
+64
+53
+51
+65
+54
+50
+68
+53
+50
+75
+50
+53
+81
+49
+54
+86
+46
+54
+85
+45
+53
+82
+47
+53
+75
+49
+50
+68
+53
+50
+63
+56
+48
+61
+57
+45
+63
+57
+43
+67
+55
+41
+73
+54
+40
+83
+50
+41
+88
+50
+41
+93
+50
+43
+100
+51
+44
+108
+53
+48
+118
+54
+52
+125
+55
+55
+130
+56
+55
+131
+55
+55
+130
+54
+54
+126
+55
+53
+125
+58
+52
+125
+60
+54
+125
+62
+53
+128
+63
+57
+131
+64
+56
+134
+63
+57
+133
+65
+56
+131
+65
+51
+131
+65
+49
+132
+65
+49
+132
+63
+48
+136
+60
+47
+136
+58
+46
+137
+57
+46
+138
+56
+45
+135
+55
+44
+134
+56
+44
+131
+57
+44
+128
+59
+44
+126
+60
+44
+124
+61
+44
+121
+62
+44
+126
+60
+44
+133
+53
+42
+138
+51
+44
+160
+77
+69
+166
+89
+81
+138
+65
+56
+124
+57
+48
+130
+70
+59
+128
+75
+61
+123
+71
+58
+122
+74
+60
+124
+76
+62
+125
+77
+63
+127
+77
+66
+130
+80
+69
+137
+85
+74
+134
+92
+76
+119
+105
+79
+117
+112
+82
+130
+114
+88
+141
+117
+93
+150
+117
+98
+159
+124
+105
+166
+135
+115
+167
+145
+122
+157
+147
+122
+150
+153
+124
+146
+160
+127
+143
+165
+129
+139
+165
+130
+134
+161
+126
+130
+156
+121
+131
+150
+118
+134
+143
+112
+136
+141
+111
+134
+140
+112
+131
+142
+112
+129
+142
+112
+126
+141
+112
+122
+138
+109
+118
+134
+107
+109
+125
+98
+104
+116
+92
+96
+104
+83
+87
+90
+71
+80
+77
+62
+72
+64
+51
+66
+54
+42
+64
+47
+39
+61
+43
+39
+60
+42
+40
+56
+42
+39
+53
+42
+40
+50
+42
+39
+47
+44
+39
+44
+45
+39
+43
+45
+40
+43
+45
+40
+44
+45
+40
+45
+44
+42
+47
+43
+42
+51
+41
+42
+52
+40
+42
+54
+39
+42
+54
+40
+40
+51
+40
+36
+60
+51
+44
+69
+62
+52
+73
+71
+56
+81
+82
+64
+93
+98
+75
+103
+113
+86
+106
+121
+90
+110
+130
+93
+107
+132
+92
+108
+137
+93
+112
+145
+98
+113
+149
+101
+111
+149
+100
+111
+151
+101
+114
+154
+102
+117
+159
+109
+114
+156
+106
+113
+155
+105
+116
+158
+110
+120
+162
+114
+122
+164
+118
+121
+162
+118
+121
+159
+118
+118
+154
+116
+119
+153
+118
+117
+148
+114
+111
+141
+107
+106
+133
+102
+99
+124
+94
+85
+108
+79
+78
+92
+69
+67
+68
+54
+64
+57
+47
+58
+51
+41
+54
+55
+49
+55
+56
+50
+55
+56
+50
+55
+56
+50
+56
+57
+51
+56
+57
+51
+57
+56
+51
+58
+57
+52
+58
+57
+52
+59
+58
+53
+62
+59
+54
+63
+60
+55
+63
+60
+55
+63
+60
+55
+64
+59
+55
+64
+59
+55
+66
+58
+55
+66
+58
+55
+65
+57
+54
+64
+56
+53
+61
+56
+52
+61
+56
+52
+60
+55
+51
+60
+55
+51
+60
+55
+51
+60
+55
+52
+60
+55
+52
+60
+55
+52
+59
+54
+51
+57
+53
+50
+57
+51
+51
+56
+51
+48
+56
+47
+48
+57
+47
+46
+56
+47
+48
+56
+48
+46
+56
+48
+46
+56
+48
+46
+54
+49
+46
+54
+49
+45
+54
+49
+45
+54
+49
+45
+53
+50
+45
+53
+50
+45
+54
+51
+46
+54
+51
+46
+55
+52
+47
+55
+52
+47
+53
+52
+48
+53
+52
+48
+56
+52
+49
+57
+53
+50
+58
+54
+51
+60
+57
+52
+61
+56
+52
+64
+57
+51
+64
+55
+48
+65
+56
+47
+67
+57
+48
+68
+58
+48
+71
+58
+49
+72
+60
+48
+73
+61
+49
+73
+61
+49
+74
+61
+52
+74
+61
+52
+74
+61
+52
+73
+60
+51
+70
+60
+51
+68
+58
+49
+66
+56
+47
+65
+55
+46
+65
+56
+49
+64
+55
+48
+64
+55
+50
+63
+54
+49
+63
+54
+49
+64
+55
+50
+64
+55
+50
+65
+56
+51
+64
+54
+52
+65
+55
+53
+67
+56
+54
+70
+56
+55
+72
+57
+54
+74
+56
+54
+74
+56
+54
+72
+57
+52
+69
+56
+48
+69
+56
+47
+69
+57
+45
+70
+56
+43
+73
+57
+44
+73
+57
+42
+76
+57
+43
+82
+54
+42
+90
+47
+38
+100
+47
+39
+110
+51
+45
+122
+54
+51
+131
+57
+56
+137
+59
+57
+139
+59
+58
+139
+61
+59
+139
+65
+62
+135
+64
+58
+130
+61
+54
+127
+60
+51
+127
+58
+51
+130
+60
+52
+136
+61
+55
+138
+64
+55
+133
+63
+53
+132
+64
+51
+132
+62
+50
+134
+62
+50
+134
+60
+49
+133
+59
+48
+132
+58
+47
+131
+59
+47
+128
+58
+46
+127
+59
+46
+126
+60
+46
+127
+61
+47
+127
+61
+47
+128
+60
+47
+129
+59
+47
+135
+57
+47
+144
+49
+43
+160
+61
+56
+203
+108
+102
+216
+127
+121
+171
+91
+84
+138
+68
+60
+136
+76
+65
+127
+78
+64
+117
+73
+60
+114
+77
+61
+113
+80
+63
+114
+81
+64
+118
+83
+64
+124
+85
+68
+132
+90
+74
+128
+100
+79
+113
+113
+79
+116
+120
+85
+138
+118
+91
+156
+115
+95
+173
+109
+99
+186
+107
+102
+194
+111
+107
+195
+116
+111
+191
+128
+119
+183
+137
+122
+173
+148
+126
+163
+156
+128
+154
+159
+129
+145
+159
+126
+139
+154
+121
+137
+151
+118
+140
+143
+114
+142
+142
+114
+139
+144
+114
+135
+146
+114
+132
+147
+114
+128
+147
+115
+122
+146
+112
+119
+144
+112
+112
+137
+105
+107
+130
+101
+103
+119
+92
+94
+107
+81
+88
+93
+71
+80
+79
+59
+72
+67
+48
+67
+58
+43
+65
+50
+43
+64
+49
+44
+59
+48
+42
+56
+47
+42
+52
+47
+41
+50
+47
+40
+46
+47
+39
+46
+47
+41
+48
+47
+42
+51
+46
+42
+54
+44
+43
+58
+42
+43
+62
+40
+43
+65
+38
+43
+69
+36
+43
+67
+38
+40
+70
+53
+45
+76
+67
+52
+86
+81
+62
+91
+89
+68
+96
+98
+74
+103
+109
+81
+105
+119
+86
+106
+123
+87
+108
+130
+91
+103
+130
+87
+102
+134
+87
+108
+142
+92
+111
+148
+97
+110
+148
+97
+110
+150
+98
+114
+154
+102
+115
+157
+107
+111
+155
+106
+111
+153
+105
+114
+156
+110
+119
+160
+116
+121
+162
+120
+120
+158
+119
+117
+155
+118
+115
+151
+115
+117
+151
+118
+115
+146
+114
+110
+139
+108
+105
+132
+99
+98
+123
+91
+84
+109
+77
+77
+93
+67
+72
+73
+59
+69
+60
+51
+63
+54
+45
+55
+56
+50
+55
+56
+50
+56
+57
+51
+56
+57
+51
+56
+57
+51
+57
+58
+52
+58
+57
+52
+58
+57
+52
+59
+58
+53
+60
+59
+54
+63
+60
+55
+64
+61
+56
+64
+61
+56
+64
+61
+56
+65
+60
+56
+65
+60
+56
+67
+59
+56
+67
+59
+56
+67
+59
+56
+66
+58
+55
+63
+58
+54
+62
+57
+53
+62
+57
+53
+61
+56
+52
+62
+57
+53
+62
+57
+53
+62
+57
+53
+62
+57
+53
+61
+56
+53
+60
+55
+51
+58
+53
+49
+59
+51
+48
+58
+48
+46
+58
+48
+46
+57
+49
+46
+57
+49
+46
+57
+49
+47
+57
+49
+46
+57
+49
+46
+55
+50
+46
+54
+49
+45
+54
+49
+45
+54
+51
+46
+54
+51
+46
+54
+51
+46
+55
+52
+47
+55
+52
+47
+55
+52
+47
+53
+52
+48
+54
+53
+49
+57
+53
+50
+59
+56
+51
+60
+57
+52
+63
+58
+52
+66
+59
+53
+66
+59
+51
+65
+56
+47
+66
+58
+47
+67
+57
+47
+69
+59
+47
+72
+60
+48
+73
+61
+49
+74
+62
+50
+74
+62
+50
+75
+62
+53
+75
+62
+53
+74
+61
+52
+74
+61
+52
+70
+60
+51
+69
+59
+50
+67
+57
+48
+66
+56
+47
+66
+57
+50
+66
+57
+50
+65
+56
+51
+64
+55
+50
+64
+55
+50
+65
+56
+51
+66
+57
+52
+66
+57
+52
+63
+56
+50
+64
+57
+51
+66
+59
+53
+69
+60
+55
+71
+60
+54
+73
+60
+54
+77
+60
+53
+78
+59
+52
+77
+54
+46
+78
+54
+44
+81
+54
+43
+81
+54
+43
+81
+55
+42
+82
+56
+43
+80
+57
+41
+86
+54
+39
+103
+53
+42
+114
+54
+44
+126
+59
+51
+137
+64
+57
+149
+68
+64
+155
+72
+68
+159
+74
+71
+159
+76
+70
+160
+81
+74
+153
+76
+68
+142
+68
+59
+133
+59
+48
+132
+55
+45
+133
+55
+45
+140
+57
+49
+143
+60
+52
+139
+60
+53
+138
+61
+55
+137
+60
+54
+136
+59
+53
+136
+59
+53
+132
+59
+52
+128
+60
+51
+125
+61
+51
+122
+62
+51
+122
+62
+51
+122
+62
+51
+125
+61
+51
+129
+59
+51
+134
+57
+51
+139
+54
+51
+146
+51
+49
+150
+41
+38
+176
+63
+59
+234
+125
+122
+252
+150
+146
+195
+104
+99
+149
+72
+64
+137
+75
+64
+120
+72
+58
+112
+76
+60
+106
+81
+61
+104
+83
+62
+106
+86
+62
+111
+86
+64
+118
+90
+69
+128
+95
+76
+130
+102
+80
+124
+113
+81
+134
+118
+85
+160
+115
+92
+183
+107
+94
+203
+95
+95
+214
+84
+92
+218
+81
+91
+218
+82
+92
+230
+111
+117
+219
+121
+120
+207
+133
+124
+195
+142
+126
+184
+147
+128
+174
+148
+125
+165
+145
+120
+162
+142
+118
+159
+137
+114
+159
+137
+116
+156
+140
+117
+152
+142
+117
+148
+144
+117
+141
+144
+115
+137
+143
+115
+133
+144
+114
+127
+137
+110
+124
+133
+106
+119
+121
+97
+112
+110
+87
+105
+97
+78
+98
+82
+66
+87
+68
+53
+83
+59
+47
+79
+52
+45
+77
+49
+45
+73
+48
+44
+68
+47
+42
+64
+47
+40
+59
+46
+38
+55
+46
+39
+54
+47
+39
+57
+48
+41
+58
+47
+41
+61
+46
+43
+65
+44
+43
+70
+41
+43
+72
+40
+43
+75
+39
+43
+72
+41
+39
+84
+66
+52
+89
+81
+60
+100
+94
+70
+103
+101
+76
+105
+108
+79
+110
+117
+86
+109
+123
+88
+108
+126
+88
+107
+132
+90
+103
+132
+86
+103
+135
+86
+109
+143
+93
+112
+149
+98
+113
+150
+98
+114
+153
+100
+117
+157
+105
+116
+155
+108
+111
+153
+107
+111
+150
+106
+114
+153
+109
+119
+157
+118
+121
+159
+120
+119
+154
+121
+116
+150
+117
+115
+148
+117
+117
+148
+117
+115
+144
+113
+111
+138
+107
+105
+132
+101
+97
+124
+91
+84
+109
+77
+77
+93
+66
+78
+79
+63
+76
+67
+58
+69
+60
+51
+57
+58
+52
+57
+58
+52
+57
+58
+52
+57
+58
+52
+57
+58
+52
+58
+59
+53
+61
+60
+55
+61
+60
+55
+61
+60
+55
+61
+60
+55
+64
+61
+56
+64
+61
+56
+65
+62
+57
+66
+63
+58
+68
+63
+59
+68
+63
+59
+69
+64
+60
+69
+64
+60
+69
+64
+58
+68
+63
+57
+68
+63
+57
+67
+62
+56
+69
+62
+56
+68
+61
+55
+66
+59
+53
+66
+59
+53
+66
+59
+53
+66
+59
+53
+66
+58
+55
+66
+59
+53
+65
+58
+52
+65
+58
+52
+65
+56
+51
+65
+56
+51
+65
+56
+51
+64
+55
+50
+64
+54
+52
+62
+55
+49
+62
+55
+49
+62
+55
+49
+60
+55
+49
+60
+55
+49
+59
+54
+48
+58
+53
+47
+56
+53
+46
+56
+53
+46
+55
+52
+47
+55
+52
+47
+57
+54
+49
+57
+54
+49
+57
+54
+49
+58
+55
+48
+60
+55
+49
+61
+56
+50
+65
+58
+50
+66
+59
+49
+67
+58
+49
+68
+60
+49
+70
+60
+50
+74
+62
+50
+75
+63
+51
+76
+64
+50
+78
+64
+51
+78
+64
+53
+78
+64
+55
+78
+64
+55
+76
+63
+54
+75
+62
+53
+73
+60
+51
+72
+59
+50
+69
+59
+50
+69
+59
+50
+66
+57
+48
+65
+56
+47
+64
+57
+49
+63
+56
+48
+63
+56
+48
+63
+56
+48
+64
+57
+51
+64
+57
+51
+60
+53
+47
+77
+68
+61
+77
+64
+58
+75
+58
+51
+84
+64
+57
+82
+54
+50
+81
+48
+43
+95
+60
+54
+91
+52
+45
+94
+54
+46
+95
+52
+43
+92
+48
+39
+94
+47
+37
+101
+54
+44
+109
+61
+49
+114
+60
+48
+137
+73
+61
+143
+71
+59
+151
+73
+63
+159
+75
+65
+159
+70
+62
+155
+62
+55
+154
+61
+54
+158
+68
+59
+166
+78
+68
+164
+80
+69
+168
+86
+74
+171
+89
+75
+165
+79
+66
+153
+65
+53
+151
+59
+48
+156
+62
+54
+148
+57
+56
+146
+56
+56
+143
+53
+53
+137
+51
+50
+136
+55
+52
+135
+62
+56
+127
+63
+54
+117
+60
+49
+117
+65
+52
+115
+63
+50
+116
+59
+48
+121
+57
+48
+133
+54
+50
+142
+50
+51
+149
+44
+49
+155
+38
+44
+198
+72
+73
+229
+99
+97
+194
+70
+68
+202
+89
+85
+224
+122
+118
+171
+86
+79
+134
+70
+60
+132
+86
+70
+109
+82
+61
+105
+91
+65
+105
+98
+70
+107
+100
+72
+107
+95
+69
+111
+94
+68
+125
+99
+76
+141
+106
+84
+145
+99
+76
+177
+110
+93
+208
+111
+104
+218
+89
+93
+222
+59
+76
+229
+45
+69
+241
+44
+72
+243
+49
+76
+243
+65
+89
+233
+74
+92
+227
+91
+101
+226
+111
+114
+224
+124
+124
+218
+129
+125
+216
+133
+127
+215
+138
+130
+196
+126
+118
+192
+128
+119
+189
+131
+120
+185
+133
+120
+181
+135
+120
+175
+136
+119
+171
+138
+121
+167
+138
+120
+157
+128
+112
+157
+125
+110
+154
+121
+106
+150
+110
+98
+145
+98
+90
+135
+85
+78
+127
+72
+67
+123
+65
+63
+117
+58
+60
+103
+47
+50
+100
+48
+50
+97
+49
+49
+79
+39
+39
+71
+37
+35
+76
+48
+45
+77
+53
+49
+72
+51
+46
+69
+50
+44
+68
+49
+45
+70
+49
+46
+70
+46
+44
+71
+43
+42
+75
+45
+45
+81
+54
+47
+89
+72
+52
+96
+87
+58
+102
+95
+66
+103
+100
+69
+107
+111
+78
+117
+124
+90
+117
+132
+93
+111
+129
+89
+108
+131
+87
+108
+135
+90
+112
+141
+93
+114
+146
+97
+115
+149
+98
+117
+151
+100
+119
+153
+102
+118
+155
+104
+114
+150
+106
+115
+152
+111
+115
+151
+113
+113
+149
+111
+115
+149
+116
+119
+153
+120
+122
+152
+124
+121
+150
+122
+120
+149
+121
+115
+141
+114
+109
+135
+106
+107
+132
+102
+105
+130
+100
+97
+122
+90
+84
+109
+77
+79
+95
+68
+79
+80
+64
+84
+75
+66
+82
+73
+64
+57
+58
+52
+57
+58
+52
+57
+58
+52
+57
+58
+52
+58
+59
+53
+59
+60
+54
+62
+61
+56
+63
+62
+57
+62
+61
+56
+62
+61
+56
+65
+62
+57
+65
+62
+57
+66
+63
+58
+67
+64
+59
+68
+63
+59
+68
+63
+59
+70
+65
+61
+69
+64
+60
+69
+64
+58
+69
+64
+58
+68
+63
+57
+68
+63
+57
+69
+62
+56
+69
+62
+56
+69
+62
+56
+69
+62
+56
+69
+62
+56
+68
+61
+53
+67
+60
+54
+67
+60
+52
+68
+59
+52
+67
+58
+49
+66
+57
+50
+66
+57
+50
+66
+57
+50
+66
+57
+50
+65
+56
+51
+65
+56
+51
+64
+57
+51
+64
+57
+51
+62
+55
+49
+60
+55
+49
+59
+54
+48
+59
+54
+48
+57
+54
+47
+56
+53
+46
+55
+52
+47
+55
+52
+47
+57
+54
+49
+57
+54
+47
+57
+54
+47
+58
+55
+48
+60
+55
+49
+62
+58
+49
+65
+58
+48
+66
+60
+48
+67
+59
+48
+69
+59
+47
+73
+61
+49
+74
+62
+48
+76
+64
+50
+76
+64
+50
+78
+64
+51
+78
+64
+51
+78
+64
+53
+78
+64
+55
+77
+63
+54
+74
+61
+52
+73
+60
+51
+72
+59
+50
+69
+59
+50
+69
+59
+50
+67
+58
+49
+66
+57
+48
+64
+57
+49
+64
+57
+49
+64
+57
+49
+64
+57
+49
+65
+58
+52
+65
+58
+50
+67
+58
+51
+73
+56
+49
+75
+47
+43
+86
+46
+44
+106
+55
+54
+116
+58
+57
+123
+59
+59
+133
+69
+67
+129
+68
+63
+131
+72
+64
+132
+73
+65
+132
+72
+62
+141
+74
+66
+152
+79
+72
+161
+80
+76
+162
+79
+71
+147
+68
+55
+148
+66
+52
+154
+66
+54
+159
+67
+56
+160
+62
+51
+156
+55
+45
+156
+55
+45
+159
+61
+48
+163
+67
+53
+155
+63
+48
+153
+64
+48
+160
+69
+51
+164
+71
+54
+167
+70
+54
+174
+72
+58
+182
+78
+69
+181
+75
+77
+176
+71
+76
+167
+64
+68
+155
+56
+59
+147
+55
+56
+142
+61
+58
+133
+62
+56
+121
+61
+51
+114
+60
+48
+124
+72
+59
+135
+75
+65
+133
+62
+56
+133
+43
+43
+149
+40
+46
+181
+57
+68
+211
+75
+87
+219
+76
+78
+221
+79
+77
+199
+64
+61
+190
+65
+63
+208
+96
+92
+179
+89
+81
+132
+64
+53
+130
+84
+68
+121
+97
+73
+101
+91
+64
+96
+92
+63
+107
+104
+73
+117
+108
+79
+119
+102
+74
+127
+99
+75
+150
+99
+78
+185
+102
+88
+210
+97
+91
+224
+88
+90
+231
+67
+78
+238
+46
+69
+249
+39
+68
+255
+40
+72
+255
+42
+73
+255
+48
+78
+243
+53
+78
+236
+63
+82
+234
+76
+90
+230
+82
+94
+224
+84
+93
+222
+85
+93
+221
+90
+98
+219
+98
+105
+216
+101
+108
+214
+105
+110
+213
+108
+113
+208
+112
+114
+206
+116
+116
+204
+118
+119
+201
+120
+119
+204
+124
+125
+203
+121
+123
+203
+118
+121
+202
+113
+117
+202
+107
+115
+201
+101
+111
+199
+97
+108
+197
+95
+108
+195
+97
+110
+177
+84
+95
+163
+76
+85
+153
+72
+81
+141
+68
+75
+132
+70
+73
+107
+55
+57
+72
+28
+27
+84
+49
+45
+77
+48
+42
+72
+49
+43
+74
+54
+47
+75
+56
+49
+75
+58
+50
+79
+62
+54
+85
+69
+56
+91
+79
+53
+99
+90
+57
+103
+97
+65
+105
+102
+69
+110
+114
+79
+122
+130
+93
+122
+137
+98
+116
+134
+94
+114
+137
+95
+112
+137
+95
+112
+139
+96
+113
+142
+96
+117
+146
+100
+119
+148
+100
+119
+148
+100
+119
+148
+102
+115
+146
+105
+120
+150
+114
+122
+151
+120
+121
+150
+120
+126
+152
+125
+131
+157
+132
+133
+157
+135
+131
+155
+133
+129
+153
+131
+122
+146
+122
+114
+137
+111
+109
+132
+104
+104
+129
+100
+96
+121
+91
+84
+109
+77
+78
+97
+69
+82
+83
+67
+86
+80
+68
+86
+79
+69
+56
+57
+51
+56
+57
+51
+56
+57
+51
+57
+58
+52
+59
+60
+54
+60
+61
+55
+63
+62
+57
+64
+63
+58
+64
+63
+58
+64
+63
+58
+67
+64
+59
+67
+64
+59
+67
+64
+59
+67
+64
+59
+68
+63
+59
+68
+63
+59
+70
+65
+59
+70
+65
+59
+70
+65
+59
+69
+64
+58
+69
+64
+58
+69
+64
+58
+71
+64
+56
+70
+63
+55
+74
+65
+58
+73
+64
+57
+72
+63
+56
+71
+62
+53
+70
+61
+54
+69
+60
+51
+70
+60
+51
+69
+59
+49
+68
+58
+49
+68
+58
+49
+68
+58
+49
+68
+58
+49
+68
+59
+52
+68
+59
+52
+68
+59
+52
+67
+60
+52
+63
+56
+48
+63
+56
+48
+60
+55
+49
+59
+54
+48
+58
+53
+47
+58
+53
+47
+57
+52
+46
+57
+52
+46
+57
+54
+47
+57
+54
+47
+58
+53
+47
+59
+55
+46
+62
+55
+47
+64
+57
+47
+66
+57
+48
+67
+59
+48
+69
+59
+49
+70
+60
+48
+73
+61
+49
+75
+63
+49
+77
+63
+50
+77
+64
+48
+78
+65
+49
+77
+64
+48
+80
+63
+53
+77
+63
+52
+76
+62
+51
+75
+61
+50
+73
+60
+51
+72
+59
+50
+69
+59
+49
+68
+58
+48
+67
+58
+49
+67
+58
+49
+65
+58
+48
+65
+58
+48
+63
+59
+50
+64
+60
+51
+64
+60
+51
+68
+59
+52
+83
+69
+60
+82
+51
+46
+105
+51
+51
+142
+65
+71
+173
+76
+87
+193
+86
+96
+203
+93
+102
+196
+96
+98
+154
+66
+62
+150
+73
+63
+149
+77
+65
+155
+79
+66
+171
+82
+74
+190
+85
+82
+203
+80
+83
+196
+76
+75
+163
+65
+52
+157
+66
+48
+160
+64
+48
+165
+63
+49
+165
+59
+46
+163
+55
+43
+164
+56
+43
+167
+61
+47
+171
+69
+54
+161
+62
+43
+152
+55
+36
+157
+58
+39
+165
+62
+45
+172
+65
+47
+178
+67
+50
+184
+67
+58
+167
+48
+50
+177
+57
+66
+185
+68
+76
+190
+75
+82
+186
+77
+82
+173
+75
+76
+150
+65
+62
+130
+55
+49
+123
+56
+47
+118
+54
+44
+122
+49
+42
+133
+48
+45
+156
+51
+55
+186
+60
+71
+215
+70
+87
+232
+77
+91
+225
+71
+73
+206
+54
+51
+205
+60
+57
+187
+52
+49
+198
+79
+75
+198
+99
+93
+148
+74
+63
+140
+91
+74
+125
+99
+76
+106
+95
+67
+104
+99
+69
+117
+111
+79
+128
+111
+81
+130
+103
+74
+143
+103
+78
+177
+104
+89
+224
+100
+98
+239
+84
+90
+238
+71
+81
+239
+58
+73
+248
+52
+74
+255
+52
+78
+255
+50
+77
+254
+46
+72
+255
+53
+79
+245
+51
+75
+240
+53
+74
+239
+56
+76
+237
+55
+77
+233
+54
+75
+236
+54
+76
+239
+57
+80
+241
+65
+88
+239
+67
+91
+239
+70
+93
+237
+73
+97
+236
+77
+99
+234
+81
+101
+233
+84
+104
+232
+86
+107
+228
+84
+107
+229
+83
+106
+228
+80
+106
+228
+78
+105
+233
+78
+109
+238
+81
+112
+242
+83
+115
+244
+87
+118
+252
+105
+133
+237
+99
+124
+225
+93
+116
+210
+87
+108
+203
+90
+108
+199
+101
+114
+166
+83
+93
+114
+45
+50
+93
+39
+39
+88
+49
+44
+87
+58
+52
+81
+63
+53
+66
+58
+45
+58
+56
+41
+63
+66
+49
+76
+78
+57
+86
+79
+51
+97
+86
+54
+101
+95
+63
+104
+101
+68
+113
+117
+84
+127
+134
+101
+126
+140
+105
+119
+136
+100
+120
+140
+105
+117
+139
+101
+114
+139
+100
+114
+139
+99
+118
+140
+101
+121
+143
+104
+122
+144
+105
+122
+144
+106
+128
+149
+118
+132
+155
+126
+138
+158
+133
+141
+160
+138
+146
+163
+144
+151
+168
+150
+152
+169
+153
+150
+166
+153
+145
+162
+146
+135
+152
+134
+122
+141
+121
+112
+131
+109
+103
+126
+98
+94
+119
+89
+84
+109
+77
+80
+99
+71
+82
+87
+67
+88
+85
+70
+89
+85
+73
+55
+56
+50
+55
+56
+50
+56
+57
+51
+57
+58
+52
+59
+60
+54
+61
+62
+56
+64
+63
+58
+65
+64
+59
+66
+65
+60
+66
+65
+60
+68
+65
+60
+68
+65
+60
+68
+65
+60
+68
+65
+60
+69
+64
+60
+69
+64
+60
+71
+66
+60
+71
+66
+60
+71
+66
+60
+70
+65
+59
+70
+65
+59
+70
+66
+57
+72
+65
+57
+72
+65
+57
+76
+67
+60
+75
+66
+57
+74
+65
+56
+73
+64
+55
+72
+62
+53
+71
+61
+51
+70
+60
+50
+69
+59
+49
+68
+58
+48
+68
+58
+48
+69
+59
+49
+69
+59
+50
+68
+59
+50
+69
+60
+51
+69
+60
+53
+69
+60
+53
+64
+57
+49
+63
+56
+48
+61
+56
+50
+60
+55
+49
+59
+54
+48
+58
+53
+47
+58
+53
+47
+58
+53
+47
+57
+54
+47
+57
+54
+45
+59
+55
+46
+59
+55
+44
+63
+56
+46
+64
+58
+46
+67
+59
+48
+68
+60
+47
+70
+60
+48
+70
+61
+46
+74
+62
+48
+75
+63
+47
+77
+64
+48
+77
+64
+48
+77
+64
+47
+77
+64
+48
+79
+63
+50
+79
+62
+52
+76
+62
+51
+75
+61
+50
+74
+60
+51
+71
+58
+49
+69
+59
+49
+68
+58
+48
+68
+59
+50
+68
+59
+50
+66
+59
+49
+64
+60
+49
+64
+60
+51
+65
+61
+52
+66
+62
+53
+70
+60
+51
+81
+56
+49
+88
+43
+38
+135
+59
+63
+189
+85
+96
+216
+85
+101
+228
+86
+102
+226
+86
+99
+201
+75
+79
+157
+52
+48
+148
+58
+47
+144
+62
+48
+152
+66
+51
+173
+70
+61
+196
+74
+71
+212
+67
+72
+203
+63
+64
+177
+66
+55
+167
+70
+53
+169
+66
+51
+172
+64
+51
+175
+63
+51
+176
+62
+51
+179
+66
+52
+180
+68
+54
+178
+71
+53
+169
+66
+47
+163
+60
+41
+164
+59
+40
+169
+60
+40
+171
+58
+40
+174
+54
+38
+173
+51
+40
+182
+57
+55
+186
+57
+61
+187
+56
+62
+186
+55
+60
+190
+61
+66
+197
+74
+76
+196
+84
+83
+190
+88
+83
+153
+63
+55
+139
+52
+42
+135
+45
+37
+157
+54
+49
+195
+72
+75
+219
+80
+87
+224
+66
+81
+218
+52
+64
+221
+59
+57
+204
+47
+42
+209
+57
+52
+198
+56
+52
+197
+70
+64
+200
+93
+85
+167
+88
+75
+144
+87
+70
+119
+87
+64
+120
+100
+73
+126
+112
+83
+130
+111
+81
+133
+102
+74
+145
+99
+75
+172
+109
+91
+213
+117
+105
+234
+85
+87
+246
+70
+80
+242
+62
+74
+242
+60
+73
+249
+64
+78
+253
+67
+81
+249
+61
+76
+243
+55
+72
+253
+66
+83
+248
+60
+77
+244
+55
+75
+246
+54
+75
+248
+52
+74
+249
+50
+73
+255
+51
+78
+255
+56
+83
+255
+51
+84
+252
+53
+86
+252
+54
+87
+249
+56
+87
+247
+58
+90
+248
+61
+92
+246
+63
+94
+245
+64
+97
+247
+67
+102
+245
+67
+103
+244
+64
+101
+245
+63
+103
+247
+65
+105
+252
+67
+109
+255
+71
+115
+255
+74
+115
+255
+81
+117
+253
+84
+117
+250
+87
+118
+239
+85
+113
+228
+86
+110
+226
+99
+120
+213
+102
+118
+180
+89
+98
+124
+49
+53
+104
+48
+47
+88
+49
+42
+80
+56
+44
+71
+62
+47
+63
+64
+46
+59
+68
+47
+65
+70
+47
+81
+74
+46
+95
+84
+56
+103
+96
+67
+111
+107
+78
+124
+124
+96
+136
+142
+114
+135
+145
+118
+125
+139
+113
+122
+141
+113
+124
+143
+115
+124
+143
+115
+122
+141
+111
+122
+138
+109
+125
+140
+111
+131
+146
+117
+136
+151
+122
+149
+163
+138
+156
+169
+149
+163
+174
+157
+166
+177
+161
+172
+180
+167
+177
+185
+174
+176
+183
+176
+171
+181
+173
+161
+171
+162
+148
+160
+148
+131
+145
+130
+115
+132
+113
+104
+124
+99
+93
+116
+88
+83
+108
+78
+80
+100
+72
+80
+88
+67
+86
+87
+69
+87
+88
+72
+54
+55
+49
+54
+55
+49
+55
+56
+50
+56
+57
+51
+58
+59
+53
+60
+61
+55
+63
+62
+57
+64
+63
+58
+66
+65
+60
+66
+65
+60
+68
+65
+60
+68
+65
+60
+68
+65
+60
+69
+66
+61
+70
+65
+61
+70
+65
+61
+70
+67
+60
+70
+67
+60
+71
+66
+60
+72
+67
+61
+72
+68
+59
+72
+68
+59
+74
+67
+59
+74
+67
+57
+76
+67
+58
+75
+66
+57
+75
+65
+56
+74
+64
+54
+74
+61
+52
+73
+61
+49
+72
+60
+48
+71
+59
+47
+69
+59
+47
+69
+59
+47
+69
+59
+47
+69
+59
+49
+69
+59
+49
+69
+59
+49
+68
+59
+50
+68
+59
+50
+64
+57
+47
+64
+57
+47
+64
+57
+49
+63
+56
+48
+60
+55
+49
+59
+54
+48
+59
+54
+48
+58
+53
+47
+59
+55
+46
+59
+55
+46
+59
+55
+46
+60
+56
+45
+63
+56
+46
+65
+59
+47
+67
+59
+48
+68
+60
+47
+71
+61
+49
+71
+62
+47
+75
+63
+49
+77
+64
+48
+77
+64
+48
+78
+65
+48
+79
+63
+47
+79
+63
+48
+79
+63
+50
+78
+61
+51
+78
+61
+51
+74
+60
+49
+73
+59
+48
+71
+59
+47
+68
+58
+48
+68
+58
+48
+68
+60
+49
+68
+60
+49
+66
+59
+49
+64
+60
+49
+65
+61
+50
+65
+63
+51
+66
+63
+54
+75
+61
+52
+91
+54
+46
+116
+52
+50
+172
+77
+83
+218
+94
+105
+229
+78
+95
+226
+65
+81
+213
+55
+69
+182
+39
+43
+167
+50
+41
+156
+56
+40
+145
+58
+38
+149
+61
+41
+171
+65
+51
+193
+69
+61
+211
+63
+63
+204
+60
+59
+177
+63
+53
+168
+66
+52
+170
+64
+50
+173
+63
+50
+178
+64
+53
+184
+67
+57
+188
+72
+59
+187
+74
+60
+172
+62
+47
+170
+63
+47
+168
+61
+43
+166
+59
+41
+170
+57
+41
+176
+58
+44
+183
+59
+47
+187
+61
+49
+200
+71
+65
+204
+69
+65
+206
+64
+63
+205
+57
+57
+211
+56
+60
+220
+67
+69
+223
+77
+78
+218
+83
+79
+193
+68
+62
+195
+77
+67
+203
+84
+76
+209
+85
+77
+215
+75
+74
+218
+64
+66
+223
+53
+62
+224
+51
+55
+217
+52
+46
+215
+57
+46
+205
+51
+43
+206
+59
+52
+190
+57
+52
+178
+65
+57
+181
+91
+80
+150
+85
+67
+123
+78
+57
+130
+98
+73
+136
+106
+80
+133
+96
+70
+147
+90
+70
+176
+100
+84
+206
+112
+100
+232
+109
+104
+231
+70
+75
+237
+60
+68
+230
+59
+67
+227
+62
+68
+227
+68
+72
+227
+73
+75
+228
+74
+76
+229
+73
+77
+240
+76
+83
+239
+68
+77
+239
+58
+73
+242
+55
+72
+245
+52
+71
+248
+49
+70
+254
+52
+76
+255
+58
+82
+255
+57
+86
+253
+58
+88
+252
+59
+88
+250
+59
+90
+251
+60
+93
+252
+63
+95
+253
+65
+98
+252
+67
+101
+253
+69
+105
+251
+69
+107
+250
+68
+108
+250
+68
+109
+250
+67
+111
+249
+68
+111
+249
+68
+113
+250
+67
+111
+255
+72
+112
+255
+66
+104
+255
+74
+109
+253
+79
+112
+238
+75
+104
+230
+80
+107
+226
+93
+114
+216
+99
+115
+186
+91
+99
+140
+64
+68
+96
+38
+36
+81
+43
+34
+86
+64
+51
+86
+79
+61
+74
+76
+55
+65
+67
+45
+82
+74
+51
+101
+89
+67
+117
+106
+86
+128
+123
+103
+142
+141
+121
+153
+156
+139
+149
+156
+140
+136
+147
+131
+130
+142
+128
+137
+151
+136
+143
+155
+141
+140
+153
+136
+135
+146
+130
+138
+147
+130
+151
+158
+142
+164
+168
+153
+178
+182
+167
+184
+188
+174
+191
+193
+182
+192
+193
+185
+194
+195
+189
+197
+198
+193
+195
+195
+195
+190
+190
+190
+176
+181
+177
+162
+169
+162
+141
+151
+140
+121
+135
+118
+105
+123
+101
+92
+115
+89
+84
+109
+79
+82
+102
+74
+80
+90
+66
+84
+89
+67
+86
+91
+71
+53
+54
+48
+53
+54
+48
+54
+55
+49
+55
+56
+50
+56
+57
+51
+58
+59
+53
+61
+60
+55
+62
+61
+56
+64
+63
+58
+64
+63
+58
+67
+64
+59
+68
+65
+60
+69
+66
+61
+69
+66
+61
+71
+66
+62
+71
+66
+62
+71
+68
+61
+71
+68
+61
+72
+67
+61
+73
+68
+62
+73
+69
+60
+73
+69
+60
+75
+68
+58
+76
+69
+59
+76
+67
+58
+75
+67
+56
+76
+66
+56
+75
+65
+53
+76
+64
+52
+75
+63
+51
+74
+62
+50
+73
+61
+49
+71
+61
+49
+71
+61
+49
+70
+60
+48
+70
+60
+48
+69
+59
+49
+69
+59
+49
+68
+59
+50
+67
+58
+49
+65
+58
+48
+65
+58
+48
+64
+57
+49
+64
+57
+49
+61
+56
+50
+60
+55
+49
+59
+54
+48
+59
+54
+48
+59
+55
+46
+59
+55
+46
+59
+55
+44
+60
+56
+45
+63
+57
+45
+65
+59
+47
+68
+60
+47
+69
+61
+48
+72
+63
+48
+74
+62
+48
+76
+63
+47
+77
+64
+48
+78
+65
+48
+78
+65
+48
+79
+63
+47
+79
+63
+47
+79
+63
+50
+78
+61
+51
+77
+60
+50
+76
+59
+49
+73
+59
+48
+71
+59
+47
+70
+57
+48
+67
+57
+47
+67
+59
+48
+66
+60
+48
+66
+59
+49
+64
+60
+49
+64
+62
+50
+65
+63
+51
+66
+63
+54
+78
+59
+52
+106
+57
+52
+149
+71
+69
+195
+90
+95
+218
+88
+98
+220
+68
+81
+219
+57
+70
+209
+52
+59
+188
+44
+43
+172
+50
+39
+159
+56
+37
+150
+58
+33
+148
+58
+32
+161
+61
+38
+179
+64
+46
+193
+59
+50
+189
+56
+49
+167
+55
+44
+162
+58
+45
+165
+57
+45
+167
+55
+44
+175
+58
+49
+184
+66
+56
+186
+69
+59
+183
+69
+58
+174
+62
+50
+173
+63
+48
+167
+60
+44
+164
+54
+39
+170
+54
+41
+182
+62
+48
+195
+68
+59
+202
+71
+61
+188
+58
+45
+203
+65
+54
+221
+70
+63
+232
+68
+66
+239
+63
+65
+239
+59
+62
+231
+52
+55
+218
+48
+48
+216
+57
+53
+222
+73
+66
+229
+85
+76
+224
+80
+71
+216
+63
+57
+214
+50
+48
+224
+48
+50
+231
+55
+55
+216
+49
+40
+221
+61
+47
+202
+46
+34
+205
+56
+49
+189
+52
+44
+174
+55
+47
+200
+104
+92
+184
+108
+92
+142
+87
+67
+135
+90
+67
+132
+86
+63
+139
+81
+61
+170
+91
+76
+209
+106
+97
+226
+103
+98
+229
+83
+84
+240
+69
+75
+239
+62
+70
+226
+60
+64
+216
+62
+62
+209
+66
+62
+209
+72
+66
+219
+80
+77
+233
+87
+87
+235
+79
+82
+238
+68
+77
+239
+59
+71
+245
+54
+70
+246
+50
+70
+246
+47
+68
+249
+50
+71
+253
+55
+78
+251
+57
+83
+248
+58
+84
+248
+58
+86
+249
+59
+87
+254
+61
+92
+255
+63
+97
+255
+67
+101
+255
+68
+107
+251
+60
+101
+251
+62
+104
+250
+63
+106
+247
+64
+108
+247
+64
+110
+244
+62
+110
+241
+61
+108
+241
+60
+105
+255
+74
+114
+251
+61
+97
+251
+66
+100
+255
+78
+110
+251
+77
+110
+243
+80
+109
+236
+86
+111
+224
+91
+110
+231
+114
+130
+194
+97
+106
+150
+74
+76
+116
+58
+56
+93
+53
+45
+82
+56
+43
+82
+66
+50
+87
+76
+58
+94
+81
+65
+114
+101
+85
+136
+124
+110
+149
+141
+130
+159
+157
+145
+166
+167
+159
+161
+166
+159
+150
+156
+152
+149
+158
+155
+158
+167
+164
+166
+175
+172
+166
+172
+168
+162
+167
+163
+166
+168
+163
+181
+180
+176
+194
+193
+188
+204
+201
+192
+209
+206
+197
+213
+208
+204
+213
+208
+205
+212
+206
+206
+213
+207
+209
+209
+203
+207
+203
+198
+202
+191
+189
+192
+176
+178
+175
+152
+159
+152
+128
+140
+126
+109
+126
+107
+96
+116
+91
+87
+110
+82
+86
+106
+78
+83
+95
+71
+86
+96
+72
+87
+95
+72
+53
+54
+48
+53
+54
+48
+53
+54
+48
+53
+54
+48
+54
+55
+49
+56
+57
+51
+58
+57
+52
+59
+58
+53
+61
+60
+55
+62
+61
+56
+65
+62
+57
+67
+64
+59
+68
+65
+60
+70
+67
+62
+72
+67
+63
+72
+67
+63
+71
+68
+61
+72
+69
+62
+73
+68
+62
+73
+68
+62
+74
+70
+61
+74
+70
+61
+77
+70
+60
+77
+70
+60
+77
+69
+58
+76
+68
+57
+77
+67
+57
+77
+67
+55
+78
+66
+54
+77
+65
+51
+78
+64
+51
+77
+65
+51
+74
+65
+50
+74
+65
+50
+73
+64
+49
+72
+63
+48
+71
+61
+49
+70
+60
+48
+68
+60
+49
+68
+60
+49
+67
+58
+49
+67
+58
+49
+65
+58
+50
+64
+57
+49
+63
+56
+50
+63
+56
+50
+60
+55
+49
+60
+55
+49
+60
+56
+47
+60
+56
+45
+60
+56
+45
+60
+56
+45
+64
+58
+46
+65
+59
+47
+68
+60
+47
+69
+61
+48
+72
+63
+48
+75
+63
+49
+77
+64
+48
+78
+65
+48
+80
+64
+48
+80
+64
+48
+79
+64
+45
+79
+63
+47
+79
+61
+49
+79
+61
+49
+77
+61
+48
+76
+60
+47
+73
+59
+48
+70
+58
+46
+69
+56
+47
+67
+57
+47
+66
+58
+47
+65
+59
+47
+65
+58
+48
+63
+59
+48
+63
+61
+49
+64
+62
+50
+64
+64
+52
+78
+58
+49
+111
+50
+47
+165
+75
+75
+190
+84
+86
+186
+63
+68
+188
+49
+54
+193
+48
+51
+191
+49
+47
+183
+50
+41
+167
+50
+33
+162
+57
+35
+155
+61
+33
+150
+61
+31
+152
+61
+32
+158
+63
+35
+164
+59
+37
+162
+55
+37
+158
+54
+41
+160
+56
+45
+162
+54
+44
+165
+52
+44
+173
+56
+49
+183
+64
+58
+184
+67
+60
+178
+64
+54
+177
+66
+55
+173
+65
+52
+168
+60
+47
+166
+56
+43
+175
+58
+48
+188
+67
+56
+195
+68
+61
+196
+65
+55
+193
+64
+45
+203
+64
+45
+213
+55
+43
+221
+44
+38
+232
+36
+37
+245
+39
+43
+253
+44
+49
+252
+49
+52
+233
+44
+42
+227
+48
+43
+220
+53
+44
+217
+55
+44
+220
+53
+44
+223
+52
+44
+229
+50
+45
+228
+51
+43
+215
+52
+37
+212
+55
+38
+207
+51
+38
+206
+55
+44
+196
+55
+46
+187
+63
+55
+199
+97
+85
+210
+127
+113
+166
+101
+83
+143
+86
+66
+139
+76
+58
+164
+86
+73
+203
+100
+91
+224
+99
+95
+232
+82
+84
+233
+66
+73
+246
+69
+77
+238
+63
+68
+225
+62
+63
+213
+64
+60
+202
+63
+56
+200
+63
+55
+211
+69
+65
+229
+77
+76
+240
+74
+78
+245
+63
+75
+251
+56
+72
+255
+54
+72
+254
+53
+72
+249
+50
+69
+249
+54
+71
+250
+59
+77
+247
+58
+80
+246
+58
+82
+246
+56
+82
+249
+56
+85
+251
+56
+88
+254
+59
+93
+255
+61
+97
+255
+63
+103
+255
+64
+106
+255
+64
+108
+255
+65
+112
+255
+67
+115
+251
+68
+116
+249
+67
+116
+247
+67
+115
+244
+67
+111
+251
+73
+109
+245
+68
+97
+249
+72
+101
+252
+77
+106
+250
+77
+107
+255
+88
+116
+255
+97
+122
+242
+94
+116
+240
+107
+126
+229
+113
+126
+211
+111
+119
+175
+93
+97
+132
+67
+65
+104
+54
+47
+105
+65
+55
+115
+85
+74
+121
+101
+92
+140
+125
+118
+163
+150
+144
+173
+163
+161
+178
+174
+171
+182
+182
+182
+178
+182
+185
+170
+175
+179
+176
+183
+189
+182
+189
+197
+189
+193
+202
+192
+195
+202
+195
+194
+202
+201
+198
+205
+213
+206
+214
+221
+215
+219
+226
+218
+216
+231
+221
+219
+233
+221
+221
+230
+218
+220
+229
+216
+223
+228
+215
+224
+224
+212
+222
+217
+207
+216
+202
+197
+203
+186
+186
+186
+162
+167
+163
+136
+146
+135
+116
+130
+113
+101
+120
+98
+92
+115
+87
+91
+111
+83
+92
+106
+80
+92
+105
+79
+94
+104
+79
+53
+54
+49
+53
+54
+49
+53
+54
+49
+53
+54
+48
+53
+54
+49
+54
+55
+49
+56
+55
+50
+57
+56
+51
+60
+59
+54
+61
+60
+55
+64
+61
+56
+66
+63
+58
+68
+65
+60
+70
+67
+60
+71
+68
+61
+72
+69
+62
+72
+69
+62
+72
+69
+62
+72
+69
+60
+74
+70
+61
+74
+70
+59
+75
+71
+59
+75
+71
+59
+78
+72
+58
+77
+71
+59
+77
+71
+59
+77
+69
+58
+77
+68
+59
+77
+68
+59
+77
+68
+61
+78
+67
+63
+78
+67
+61
+77
+67
+55
+77
+68
+53
+75
+66
+51
+74
+65
+50
+72
+62
+50
+71
+61
+49
+69
+61
+50
+68
+59
+50
+67
+58
+49
+67
+58
+51
+65
+58
+50
+65
+58
+52
+64
+57
+51
+63
+55
+52
+60
+55
+51
+60
+55
+49
+62
+55
+47
+62
+55
+47
+60
+56
+47
+61
+57
+48
+62
+58
+49
+65
+58
+50
+67
+60
+50
+68
+61
+51
+72
+64
+53
+73
+63
+51
+76
+64
+50
+77
+65
+49
+78
+65
+48
+80
+64
+48
+79
+64
+45
+79
+63
+47
+76
+62
+49
+76
+62
+51
+75
+61
+50
+76
+59
+51
+74
+57
+49
+73
+56
+49
+70
+55
+48
+67
+56
+50
+65
+56
+47
+62
+58
+47
+61
+59
+47
+60
+61
+47
+63
+61
+48
+64
+62
+47
+66
+63
+48
+83
+57
+44
+134
+61
+55
+193
+93
+91
+200
+90
+89
+174
+56
+54
+170
+47
+42
+177
+50
+43
+171
+47
+37
+171
+51
+35
+170
+58
+38
+171
+67
+42
+169
+71
+44
+163
+70
+39
+160
+66
+38
+161
+66
+38
+161
+61
+35
+158
+58
+35
+160
+57
+42
+163
+59
+48
+166
+58
+48
+166
+55
+46
+173
+60
+52
+182
+67
+60
+183
+69
+59
+176
+64
+53
+171
+61
+48
+168
+60
+47
+169
+59
+46
+172
+60
+48
+187
+69
+57
+198
+76
+65
+197
+69
+60
+188
+56
+44
+188
+55
+36
+201
+60
+40
+218
+61
+46
+227
+53
+44
+238
+44
+42
+246
+42
+43
+249
+40
+43
+247
+39
+39
+246
+44
+42
+241
+48
+43
+236
+52
+44
+232
+54
+44
+227
+53
+42
+226
+52
+41
+225
+51
+40
+222
+52
+37
+222
+59
+42
+207
+50
+31
+219
+63
+48
+205
+55
+41
+199
+57
+45
+194
+63
+53
+179
+65
+54
+209
+108
+96
+191
+103
+89
+165
+82
+66
+170
+78
+65
+205
+98
+90
+232
+103
+98
+231
+81
+82
+235
+64
+70
+246
+65
+74
+237
+60
+68
+227
+58
+61
+215
+59
+60
+207
+62
+57
+195
+61
+52
+185
+54
+44
+187
+52
+46
+199
+56
+52
+229
+71
+72
+234
+63
+69
+242
+58
+68
+249
+57
+72
+252
+57
+73
+250
+55
+71
+250
+58
+73
+251
+63
+78
+252
+67
+85
+251
+65
+86
+250
+63
+84
+249
+59
+84
+251
+58
+85
+253
+58
+90
+255
+59
+94
+255
+60
+99
+255
+64
+104
+255
+63
+107
+255
+63
+110
+251
+63
+111
+247
+64
+112
+245
+65
+113
+245
+64
+115
+243
+66
+112
+244
+68
+106
+252
+79
+109
+255
+86
+115
+243
+76
+104
+231
+66
+96
+249
+86
+115
+255
+105
+133
+255
+102
+130
+246
+94
+119
+238
+96
+120
+231
+104
+123
+220
+112
+125
+199
+112
+120
+170
+102
+103
+143
+92
+88
+126
+89
+81
+153
+126
+119
+171
+152
+146
+190
+176
+173
+197
+187
+186
+198
+194
+195
+200
+199
+204
+199
+199
+207
+195
+195
+207
+203
+202
+216
+204
+202
+216
+209
+202
+218
+215
+206
+223
+221
+213
+228
+230
+219
+233
+232
+224
+235
+237
+227
+235
+239
+229
+230
+242
+232
+230
+244
+232
+232
+240
+228
+230
+238
+225
+232
+237
+224
+233
+234
+221
+231
+228
+216
+226
+209
+202
+209
+193
+191
+194
+171
+171
+169
+145
+150
+143
+122
+134
+120
+108
+123
+104
+98
+117
+95
+96
+114
+90
+100
+114
+89
+100
+112
+88
+100
+110
+86
+50
+49
+47
+51
+50
+48
+52
+51
+49
+54
+53
+49
+56
+55
+53
+57
+56
+52
+57
+56
+52
+57
+56
+52
+59
+58
+53
+60
+59
+54
+61
+61
+53
+63
+63
+55
+65
+65
+57
+67
+67
+57
+69
+69
+59
+69
+69
+59
+72
+72
+64
+72
+72
+62
+72
+72
+60
+74
+72
+59
+75
+74
+56
+76
+75
+55
+77
+76
+56
+78
+75
+56
+77
+74
+57
+74
+70
+58
+71
+68
+59
+74
+70
+67
+78
+73
+77
+78
+73
+80
+71
+68
+79
+68
+63
+69
+78
+69
+62
+76
+67
+52
+74
+64
+52
+75
+65
+53
+77
+67
+57
+76
+66
+56
+70
+61
+52
+66
+57
+48
+69
+60
+53
+67
+58
+53
+64
+57
+51
+63
+55
+52
+64
+56
+53
+63
+55
+53
+60
+55
+52
+60
+52
+50
+67
+58
+53
+66
+57
+52
+65
+57
+54
+62
+57
+53
+63
+58
+55
+62
+58
+55
+63
+59
+56
+64
+60
+57
+66
+63
+58
+68
+64
+55
+71
+64
+54
+74
+64
+52
+76
+64
+48
+79
+64
+45
+79
+64
+43
+76
+63
+44
+70
+64
+50
+69
+62
+52
+72
+59
+51
+74
+56
+52
+75
+54
+53
+77
+52
+55
+75
+55
+57
+72
+58
+58
+67
+62
+58
+55
+56
+48
+55
+59
+45
+62
+66
+49
+62
+64
+43
+58
+56
+35
+67
+59
+36
+101
+66
+46
+189
+106
+92
+183
+75
+65
+166
+55
+44
+164
+54
+41
+167
+55
+43
+164
+54
+39
+163
+56
+38
+168
+61
+43
+162
+57
+36
+165
+60
+38
+169
+64
+42
+171
+65
+41
+172
+61
+41
+172
+57
+38
+174
+54
+37
+170
+55
+37
+164
+54
+39
+161
+55
+41
+162
+56
+42
+166
+60
+46
+170
+64
+50
+172
+66
+52
+172
+66
+50
+172
+65
+49
+169
+62
+44
+171
+61
+44
+173
+60
+44
+179
+61
+47
+189
+67
+52
+196
+70
+56
+192
+62
+49
+184
+50
+38
+199
+57
+43
+203
+57
+42
+207
+57
+43
+213
+57
+45
+219
+55
+45
+225
+54
+46
+231
+52
+47
+237
+50
+45
+240
+46
+44
+242
+47
+45
+242
+49
+44
+239
+50
+44
+234
+53
+42
+227
+55
+41
+221
+58
+41
+218
+59
+40
+219
+58
+38
+212
+51
+31
+207
+52
+32
+206
+56
+39
+197
+56
+39
+190
+54
+40
+194
+66
+53
+207
+83
+73
+200
+78
+67
+207
+83
+75
+225
+92
+87
+238
+93
+90
+240
+80
+82
+237
+62
+67
+243
+56
+63
+248
+63
+71
+235
+64
+70
+225
+67
+68
+214
+64
+65
+201
+62
+57
+187
+60
+51
+179
+58
+47
+177
+59
+47
+180
+59
+48
+202
+76
+64
+212
+75
+67
+222
+70
+67
+226
+62
+63
+235
+60
+65
+248
+63
+71
+254
+62
+73
+249
+59
+71
+253
+69
+81
+250
+68
+81
+253
+68
+82
+255
+68
+85
+253
+64
+86
+250
+60
+85
+254
+61
+90
+255
+66
+100
+255
+70
+107
+255
+65
+106
+249
+59
+103
+245
+58
+103
+244
+61
+109
+248
+68
+115
+253
+73
+121
+255
+75
+122
+255
+78
+121
+255
+78
+117
+249
+81
+116
+239
+82
+113
+229
+79
+106
+229
+79
+106
+247
+90
+119
+255
+103
+135
+255
+93
+128
+240
+69
+105
+245
+86
+118
+232
+94
+120
+198
+91
+109
+194
+117
+125
+140
+92
+92
+145
+114
+109
+171
+143
+132
+189
+167
+156
+212
+195
+187
+222
+213
+208
+221
+220
+218
+220
+219
+224
+222
+220
+231
+226
+219
+235
+231
+216
+237
+235
+216
+238
+241
+217
+241
+244
+220
+242
+245
+227
+243
+245
+231
+244
+243
+236
+244
+244
+239
+243
+248
+243
+240
+248
+243
+239
+248
+240
+238
+245
+236
+237
+242
+231
+235
+237
+226
+232
+232
+221
+227
+229
+220
+225
+214
+208
+212
+205
+201
+202
+187
+186
+184
+163
+165
+160
+139
+144
+137
+121
+131
+120
+114
+125
+111
+112
+123
+107
+123
+132
+115
+119
+128
+109
+118
+125
+107
+48
+46
+47
+49
+47
+48
+51
+50
+48
+53
+52
+50
+54
+53
+51
+55
+54
+50
+56
+55
+51
+56
+55
+50
+58
+57
+52
+59
+58
+53
+61
+61
+53
+63
+63
+55
+65
+65
+55
+67
+67
+57
+68
+68
+56
+69
+69
+59
+72
+72
+62
+72
+72
+62
+72
+72
+60
+74
+72
+57
+75
+74
+54
+76
+75
+54
+77
+77
+53
+78
+77
+56
+75
+74
+56
+75
+73
+61
+75
+74
+69
+80
+80
+82
+87
+85
+96
+89
+88
+106
+86
+84
+106
+82
+79
+96
+79
+73
+75
+77
+68
+63
+72
+63
+58
+70
+61
+56
+71
+62
+57
+72
+63
+58
+70
+61
+56
+66
+59
+53
+68
+58
+56
+65
+57
+54
+63
+55
+52
+63
+55
+52
+64
+56
+53
+64
+56
+53
+61
+56
+53
+59
+54
+50
+61
+52
+47
+61
+52
+47
+61
+53
+50
+60
+55
+52
+61
+57
+54
+62
+58
+57
+61
+60
+58
+62
+61
+57
+66
+63
+58
+68
+63
+57
+71
+64
+54
+74
+64
+52
+77
+64
+48
+79
+64
+45
+80
+63
+43
+76
+63
+44
+65
+64
+46
+63
+64
+50
+69
+60
+53
+72
+57
+54
+74
+54
+55
+74
+52
+55
+70
+51
+55
+67
+52
+55
+65
+60
+57
+60
+59
+54
+61
+61
+49
+69
+63
+49
+74
+58
+42
+80
+54
+37
+100
+65
+46
+133
+74
+58
+176
+80
+66
+171
+59
+45
+160
+50
+35
+161
+54
+38
+163
+58
+39
+158
+55
+36
+158
+57
+37
+163
+62
+42
+161
+59
+37
+167
+60
+40
+174
+63
+43
+179
+64
+45
+182
+61
+44
+183
+57
+42
+184
+54
+40
+181
+55
+41
+170
+57
+41
+165
+58
+42
+164
+57
+41
+165
+59
+43
+168
+62
+46
+171
+65
+49
+171
+66
+47
+171
+64
+46
+174
+63
+44
+171
+58
+40
+177
+60
+43
+191
+69
+54
+198
+72
+57
+193
+63
+49
+188
+56
+43
+192
+54
+41
+203
+55
+43
+207
+55
+44
+208
+57
+46
+209
+59
+45
+212
+60
+47
+216
+58
+46
+224
+56
+47
+231
+52
+45
+238
+49
+45
+244
+46
+43
+244
+46
+43
+241
+48
+43
+234
+52
+41
+225
+55
+40
+215
+58
+39
+213
+58
+36
+222
+60
+39
+217
+54
+35
+213
+56
+37
+212
+61
+42
+204
+59
+42
+193
+53
+38
+196
+58
+47
+207
+70
+60
+209
+70
+63
+218
+73
+68
+233
+79
+77
+243
+80
+81
+244
+71
+73
+240
+59
+64
+245
+58
+65
+248
+67
+72
+229
+66
+69
+218
+68
+67
+210
+66
+65
+197
+62
+56
+183
+59
+49
+174
+58
+45
+170
+60
+45
+171
+61
+46
+182
+69
+53
+198
+76
+63
+212
+78
+69
+220
+71
+67
+227
+63
+62
+239
+63
+66
+250
+63
+70
+254
+64
+74
+248
+67
+74
+247
+67
+76
+250
+68
+80
+255
+70
+84
+253
+66
+83
+249
+62
+83
+252
+62
+88
+255
+66
+97
+255
+70
+104
+255
+67
+105
+252
+63
+105
+249
+64
+106
+249
+66
+112
+252
+70
+118
+254
+74
+122
+255
+75
+123
+255
+72
+120
+255
+71
+115
+244
+74
+111
+242
+82
+116
+243
+93
+122
+246
+96
+123
+247
+88
+118
+247
+79
+112
+250
+70
+107
+248
+68
+107
+238
+68
+104
+220
+73
+102
+203
+92
+111
+182
+106
+116
+115
+71
+72
+150
+121
+115
+180
+148
+137
+206
+176
+165
+229
+209
+200
+239
+226
+220
+235
+231
+230
+233
+232
+237
+236
+230
+242
+237
+226
+243
+246
+227
+249
+251
+225
+250
+255
+227
+253
+255
+230
+253
+255
+236
+254
+255
+242
+253
+254
+247
+254
+252
+250
+251
+253
+249
+246
+252
+249
+244
+251
+246
+243
+249
+244
+241
+247
+238
+239
+243
+234
+237
+240
+231
+236
+238
+229
+234
+230
+221
+224
+220
+214
+216
+202
+198
+197
+179
+178
+174
+158
+161
+154
+142
+147
+140
+137
+143
+133
+136
+144
+131
+142
+148
+134
+137
+144
+128
+134
+140
+126
+47
+46
+44
+48
+47
+45
+49
+48
+46
+50
+49
+47
+52
+51
+47
+53
+52
+48
+55
+54
+50
+55
+54
+49
+58
+57
+52
+58
+58
+50
+60
+60
+52
+62
+62
+54
+64
+64
+54
+66
+66
+56
+67
+67
+57
+68
+68
+58
+73
+70
+61
+73
+71
+59
+74
+72
+59
+76
+73
+56
+77
+74
+55
+78
+76
+55
+78
+76
+55
+79
+76
+57
+75
+73
+58
+78
+75
+66
+84
+82
+83
+95
+94
+102
+105
+104
+120
+109
+109
+133
+108
+107
+138
+107
+104
+131
+96
+89
+105
+89
+81
+92
+79
+71
+82
+72
+64
+75
+72
+62
+71
+71
+61
+69
+69
+60
+65
+64
+58
+60
+67
+58
+59
+63
+58
+55
+60
+55
+52
+60
+55
+51
+61
+56
+50
+62
+57
+51
+62
+58
+49
+61
+57
+48
+56
+51
+45
+57
+52
+46
+59
+54
+48
+60
+57
+50
+61
+58
+51
+62
+59
+52
+63
+60
+53
+64
+60
+51
+69
+62
+52
+71
+63
+52
+73
+63
+51
+76
+64
+48
+79
+63
+48
+80
+63
+47
+80
+63
+45
+76
+63
+44
+60
+59
+39
+58
+61
+42
+62
+60
+47
+65
+58
+48
+66
+55
+51
+67
+53
+52
+63
+52
+50
+60
+50
+49
+63
+55
+52
+68
+57
+53
+75
+56
+50
+82
+49
+44
+92
+43
+39
+111
+46
+44
+139
+58
+57
+164
+69
+67
+165
+58
+48
+162
+50
+36
+159
+49
+32
+164
+57
+39
+165
+60
+41
+158
+55
+36
+158
+56
+34
+162
+60
+38
+164
+59
+38
+170
+61
+41
+177
+65
+45
+182
+65
+47
+185
+62
+46
+187
+60
+45
+190
+58
+45
+190
+60
+47
+178
+60
+46
+172
+60
+46
+169
+57
+43
+169
+57
+43
+171
+60
+43
+173
+62
+45
+173
+62
+45
+173
+60
+44
+178
+63
+45
+176
+56
+40
+185
+62
+46
+203
+76
+61
+203
+71
+58
+188
+54
+42
+186
+50
+38
+201
+57
+46
+208
+54
+44
+212
+54
+43
+212
+56
+44
+214
+58
+46
+216
+58
+47
+220
+56
+46
+227
+54
+47
+232
+51
+44
+240
+48
+45
+244
+46
+43
+244
+46
+43
+240
+49
+41
+231
+50
+39
+221
+54
+38
+212
+56
+34
+210
+55
+33
+221
+56
+36
+220
+53
+35
+218
+57
+39
+218
+62
+47
+211
+61
+46
+200
+54
+41
+197
+57
+44
+203
+65
+55
+201
+60
+53
+205
+62
+56
+217
+69
+65
+229
+75
+73
+234
+74
+74
+233
+67
+67
+236
+63
+65
+235
+67
+67
+222
+67
+65
+213
+68
+63
+205
+66
+61
+194
+61
+52
+182
+58
+46
+174
+56
+42
+171
+58
+42
+172
+59
+43
+172
+56
+41
+192
+68
+56
+212
+78
+69
+221
+73
+69
+224
+64
+64
+232
+62
+65
+247
+66
+73
+255
+72
+80
+244
+65
+71
+244
+64
+73
+249
+67
+79
+253
+71
+84
+254
+69
+85
+250
+64
+85
+251
+63
+88
+254
+65
+95
+255
+68
+102
+255
+67
+105
+255
+67
+107
+255
+70
+112
+255
+73
+119
+255
+75
+123
+255
+76
+124
+255
+74
+122
+255
+66
+116
+255
+68
+116
+254
+72
+113
+250
+78
+116
+252
+91
+124
+255
+98
+128
+250
+87
+118
+236
+69
+99
+248
+77
+109
+254
+86
+119
+218
+64
+92
+203
+71
+94
+218
+121
+132
+187
+121
+123
+103
+64
+59
+151
+123
+112
+178
+140
+129
+215
+177
+166
+245
+216
+208
+253
+234
+228
+250
+240
+239
+250
+245
+249
+249
+243
+253
+244
+236
+251
+251
+233
+255
+255
+233
+255
+255
+234
+255
+255
+237
+255
+255
+242
+255
+255
+246
+255
+255
+251
+255
+255
+254
+252
+255
+253
+250
+255
+252
+248
+255
+249
+247
+255
+247
+245
+254
+244
+245
+252
+242
+243
+250
+239
+243
+248
+239
+242
+240
+231
+234
+229
+223
+225
+211
+207
+206
+190
+189
+185
+173
+174
+168
+162
+165
+158
+157
+163
+153
+157
+163
+151
+163
+171
+158
+157
+165
+150
+153
+161
+148
+47
+46
+44
+47
+46
+44
+48
+47
+45
+49
+48
+44
+50
+49
+45
+51
+50
+46
+53
+52
+47
+54
+53
+48
+56
+56
+48
+57
+57
+49
+59
+59
+51
+61
+61
+53
+63
+63
+53
+65
+65
+55
+66
+66
+56
+67
+67
+57
+72
+69
+60
+74
+70
+59
+75
+72
+57
+77
+74
+57
+80
+75
+56
+79
+77
+56
+81
+76
+56
+79
+76
+59
+76
+74
+62
+81
+80
+76
+94
+93
+98
+109
+108
+122
+122
+122
+146
+129
+130
+161
+128
+130
+168
+128
+128
+166
+123
+117
+151
+114
+107
+138
+101
+95
+123
+89
+83
+109
+84
+76
+100
+77
+69
+90
+71
+64
+80
+66
+60
+72
+68
+63
+70
+64
+59
+63
+60
+56
+55
+59
+54
+51
+59
+54
+48
+60
+56
+47
+61
+57
+46
+59
+56
+47
+58
+55
+48
+57
+57
+49
+59
+59
+51
+62
+59
+50
+63
+61
+49
+64
+60
+49
+63
+59
+47
+65
+59
+45
+70
+63
+47
+72
+63
+46
+75
+63
+47
+77
+64
+47
+79
+63
+48
+79
+63
+47
+80
+62
+48
+76
+63
+47
+66
+61
+42
+63
+62
+44
+64
+61
+46
+65
+58
+48
+65
+58
+50
+64
+57
+51
+62
+57
+53
+60
+57
+52
+61
+56
+52
+70
+56
+53
+80
+52
+49
+88
+44
+43
+107
+41
+43
+135
+48
+54
+161
+55
+65
+174
+61
+65
+167
+54
+46
+165
+55
+40
+165
+58
+40
+170
+63
+45
+168
+63
+44
+160
+57
+38
+161
+56
+35
+164
+59
+38
+165
+58
+38
+171
+60
+41
+179
+62
+44
+185
+64
+47
+189
+62
+47
+193
+61
+48
+197
+61
+49
+196
+62
+50
+189
+63
+51
+182
+61
+50
+178
+57
+46
+174
+56
+42
+175
+57
+43
+176
+58
+44
+178
+58
+44
+179
+57
+42
+182
+59
+44
+185
+59
+45
+196
+66
+52
+203
+69
+57
+200
+62
+51
+190
+49
+39
+192
+50
+40
+205
+57
+47
+214
+53
+43
+216
+52
+42
+218
+54
+45
+219
+55
+45
+222
+55
+46
+225
+54
+44
+230
+51
+44
+236
+49
+42
+243
+48
+44
+244
+46
+43
+244
+47
+41
+239
+48
+40
+228
+50
+38
+219
+52
+36
+210
+54
+32
+208
+53
+31
+215
+50
+30
+218
+48
+31
+218
+52
+36
+220
+60
+46
+214
+61
+47
+208
+57
+46
+205
+61
+50
+210
+68
+58
+196
+53
+45
+197
+54
+48
+202
+59
+53
+216
+68
+64
+226
+77
+73
+229
+75
+73
+222
+67
+63
+214
+61
+56
+211
+64
+57
+206
+65
+56
+199
+62
+52
+190
+60
+47
+181
+58
+43
+176
+56
+42
+175
+57
+43
+177
+59
+45
+172
+52
+38
+189
+63
+51
+209
+72
+64
+217
+72
+67
+221
+66
+64
+229
+64
+68
+243
+70
+76
+253
+78
+85
+240
+63
+69
+240
+63
+69
+246
+66
+77
+254
+72
+85
+254
+72
+87
+252
+66
+87
+250
+64
+88
+252
+65
+94
+255
+65
+99
+255
+67
+102
+255
+70
+109
+255
+73
+114
+255
+77
+121
+255
+79
+124
+255
+76
+123
+255
+72
+121
+255
+63
+113
+255
+74
+122
+255
+79
+122
+252
+73
+112
+246
+77
+110
+252
+87
+117
+252
+87
+117
+243
+79
+106
+239
+75
+102
+236
+78
+103
+206
+62
+85
+220
+98
+113
+251
+156
+164
+211
+141
+141
+104
+57
+51
+113
+75
+64
+166
+119
+109
+210
+163
+155
+247
+210
+202
+255
+231
+226
+255
+242
+241
+255
+251
+254
+255
+250
+255
+249
+241
+254
+250
+237
+255
+252
+237
+255
+255
+237
+255
+255
+240
+255
+255
+242
+253
+255
+246
+254
+254
+250
+251
+255
+251
+250
+255
+252
+249
+255
+251
+247
+255
+249
+247
+255
+248
+246
+255
+245
+246
+254
+244
+245
+254
+243
+247
+253
+242
+246
+246
+235
+239
+236
+227
+228
+218
+213
+210
+201
+198
+193
+186
+185
+180
+179
+180
+172
+177
+180
+169
+176
+182
+170
+183
+191
+180
+175
+183
+172
+169
+177
+166
+49
+48
+44
+49
+48
+44
+48
+47
+43
+48
+47
+43
+49
+48
+44
+50
+49
+44
+52
+51
+46
+53
+52
+47
+55
+55
+47
+56
+56
+48
+57
+57
+49
+59
+59
+51
+61
+61
+51
+63
+63
+53
+65
+65
+55
+68
+65
+56
+73
+69
+58
+76
+70
+58
+78
+72
+58
+80
+74
+58
+82
+75
+57
+82
+77
+58
+83
+76
+58
+81
+75
+61
+79
+74
+68
+86
+84
+85
+102
+100
+113
+119
+120
+141
+134
+134
+168
+141
+144
+185
+143
+147
+195
+143
+144
+198
+142
+139
+192
+135
+131
+182
+123
+119
+169
+112
+109
+154
+105
+100
+141
+95
+91
+126
+85
+80
+110
+78
+74
+97
+75
+71
+88
+69
+66
+77
+63
+61
+66
+59
+55
+56
+57
+53
+50
+57
+54
+47
+56
+53
+44
+56
+53
+44
+54
+55
+49
+55
+56
+51
+56
+57
+49
+59
+59
+49
+62
+60
+47
+63
+60
+43
+66
+61
+42
+67
+60
+41
+71
+63
+44
+74
+63
+43
+75
+64
+44
+76
+65
+47
+77
+64
+48
+77
+63
+50
+76
+64
+52
+76
+62
+51
+77
+63
+52
+76
+62
+53
+73
+58
+51
+67
+56
+50
+63
+56
+50
+60
+57
+52
+56
+59
+52
+55
+60
+53
+57
+60
+51
+64
+57
+49
+72
+51
+46
+90
+49
+47
+119
+55
+56
+149
+62
+68
+167
+61
+71
+169
+56
+60
+170
+59
+48
+170
+60
+43
+171
+64
+46
+172
+65
+47
+169
+64
+45
+165
+60
+41
+166
+59
+39
+171
+62
+42
+167
+56
+36
+173
+58
+39
+181
+60
+43
+188
+61
+46
+193
+60
+45
+197
+59
+46
+202
+60
+48
+202
+61
+51
+197
+63
+54
+190
+62
+51
+186
+58
+47
+183
+55
+44
+183
+55
+44
+184
+56
+43
+186
+56
+43
+186
+56
+43
+187
+55
+43
+199
+65
+53
+205
+67
+56
+197
+56
+46
+193
+49
+38
+198
+51
+41
+203
+55
+45
+207
+53
+43
+219
+52
+43
+223
+51
+41
+225
+52
+45
+226
+54
+44
+227
+53
+44
+231
+53
+43
+236
+49
+42
+240
+47
+42
+245
+47
+44
+246
+47
+42
+242
+47
+41
+236
+48
+39
+226
+50
+35
+217
+52
+33
+208
+53
+31
+207
+52
+30
+214
+49
+30
+217
+47
+30
+216
+50
+34
+216
+54
+41
+215
+57
+45
+212
+58
+48
+214
+63
+54
+216
+69
+61
+214
+70
+62
+205
+64
+55
+201
+60
+53
+203
+64
+57
+214
+75
+68
+217
+78
+71
+210
+69
+62
+197
+59
+49
+197
+61
+49
+194
+60
+48
+192
+60
+47
+186
+59
+44
+183
+57
+42
+180
+58
+43
+182
+60
+45
+185
+63
+48
+181
+57
+45
+191
+60
+50
+201
+64
+58
+210
+67
+63
+219
+67
+66
+227
+68
+72
+237
+74
+79
+246
+79
+86
+236
+63
+69
+237
+62
+67
+242
+66
+76
+251
+73
+85
+255
+74
+89
+253
+70
+88
+250
+67
+89
+251
+67
+93
+251
+64
+95
+251
+66
+100
+255
+69
+108
+255
+74
+115
+255
+78
+122
+255
+79
+124
+255
+76
+121
+255
+72
+118
+255
+68
+114
+255
+78
+124
+255
+80
+122
+251
+72
+111
+245
+74
+108
+253
+86
+116
+254
+87
+115
+243
+81
+105
+231
+71
+95
+224
+72
+93
+226
+88
+104
+255
+147
+158
+255
+178
+184
+239
+155
+155
+140
+72
+69
+108
+47
+42
+166
+106
+98
+206
+149
+142
+243
+198
+192
+255
+225
+220
+255
+240
+239
+255
+251
+253
+255
+253
+255
+251
+246
+253
+252
+246
+255
+253
+245
+255
+255
+245
+255
+255
+246
+255
+255
+248
+255
+255
+250
+254
+255
+252
+251
+255
+252
+249
+255
+251
+247
+255
+250
+247
+255
+248
+247
+255
+247
+246
+255
+245
+247
+255
+244
+246
+255
+243
+247
+255
+243
+247
+253
+241
+243
+243
+233
+234
+228
+220
+218
+214
+209
+205
+205
+202
+195
+201
+201
+191
+202
+202
+192
+202
+205
+194
+201
+208
+200
+190
+200
+191
+182
+192
+183
+54
+53
+49
+52
+51
+46
+51
+50
+46
+49
+48
+43
+49
+48
+43
+50
+49
+44
+51
+50
+45
+52
+51
+46
+54
+54
+46
+55
+55
+47
+56
+56
+48
+58
+58
+50
+60
+60
+50
+62
+62
+52
+64
+64
+54
+66
+64
+52
+74
+68
+56
+77
+69
+56
+79
+72
+56
+82
+75
+59
+84
+75
+58
+84
+77
+59
+83
+76
+60
+82
+75
+65
+81
+76
+73
+90
+87
+94
+108
+105
+124
+127
+126
+157
+140
+143
+184
+150
+153
+204
+153
+158
+216
+154
+158
+222
+153
+152
+218
+148
+145
+212
+140
+138
+201
+134
+133
+191
+129
+126
+181
+120
+118
+167
+110
+107
+150
+102
+101
+135
+93
+90
+119
+86
+84
+105
+77
+75
+89
+68
+65
+74
+62
+60
+63
+59
+58
+56
+59
+55
+52
+55
+54
+50
+53
+53
+53
+52
+53
+55
+54
+54
+52
+56
+55
+50
+60
+58
+46
+63
+60
+43
+67
+62
+42
+70
+64
+42
+71
+63
+42
+72
+64
+43
+73
+65
+44
+73
+66
+48
+73
+65
+52
+72
+66
+54
+72
+65
+57
+72
+63
+58
+76
+61
+58
+76
+58
+58
+71
+55
+55
+64
+54
+53
+58
+54
+53
+53
+55
+52
+49
+56
+49
+47
+57
+48
+55
+60
+53
+55
+52
+43
+67
+48
+41
+93
+56
+50
+126
+66
+65
+149
+71
+71
+157
+63
+64
+158
+52
+52
+167
+59
+47
+170
+60
+43
+170
+63
+45
+170
+63
+45
+169
+62
+44
+169
+62
+42
+172
+63
+43
+176
+63
+45
+171
+56
+37
+178
+57
+40
+185
+58
+43
+191
+57
+45
+195
+57
+44
+200
+58
+46
+205
+58
+48
+207
+60
+52
+203
+62
+53
+198
+59
+52
+194
+57
+49
+193
+56
+46
+193
+56
+46
+194
+57
+47
+194
+56
+46
+195
+54
+44
+197
+55
+45
+209
+67
+57
+208
+64
+55
+195
+48
+38
+195
+44
+35
+208
+55
+47
+214
+60
+52
+211
+50
+42
+224
+51
+44
+228
+50
+40
+231
+50
+43
+232
+51
+42
+234
+51
+43
+237
+50
+43
+240
+47
+42
+243
+45
+42
+246
+47
+42
+245
+46
+41
+241
+48
+41
+236
+49
+40
+225
+52
+36
+218
+53
+34
+209
+54
+32
+208
+53
+31
+216
+55
+35
+217
+51
+35
+214
+51
+36
+213
+51
+38
+213
+53
+41
+212
+56
+44
+212
+60
+49
+214
+63
+54
+236
+89
+81
+225
+82
+74
+211
+72
+65
+204
+67
+59
+202
+69
+60
+204
+73
+63
+200
+69
+59
+192
+62
+49
+188
+58
+42
+188
+59
+40
+188
+58
+42
+185
+58
+41
+183
+58
+40
+184
+58
+43
+188
+62
+48
+191
+65
+51
+193
+65
+54
+193
+60
+51
+197
+60
+54
+207
+65
+61
+215
+69
+69
+221
+71
+72
+228
+73
+77
+235
+76
+80
+232
+66
+70
+234
+64
+67
+240
+67
+73
+249
+75
+84
+254
+78
+89
+252
+74
+90
+252
+70
+92
+252
+70
+95
+248
+65
+95
+249
+66
+97
+253
+69
+105
+255
+74
+112
+255
+78
+119
+255
+79
+122
+255
+78
+120
+255
+76
+118
+254
+77
+119
+255
+79
+118
+252
+77
+116
+250
+79
+115
+255
+87
+121
+255
+95
+123
+252
+85
+111
+233
+71
+94
+243
+86
+107
+231
+83
+99
+240
+100
+113
+255
+144
+154
+254
+137
+145
+236
+130
+134
+194
+95
+98
+165
+77
+76
+179
+104
+101
+206
+141
+137
+240
+187
+183
+255
+219
+215
+255
+238
+237
+255
+247
+247
+255
+250
+253
+251
+249
+254
+253
+250
+255
+252
+251
+255
+253
+250
+255
+255
+250
+255
+255
+250
+254
+255
+251
+252
+253
+252
+250
+255
+251
+248
+255
+251
+247
+255
+251
+248
+255
+250
+249
+255
+250
+249
+255
+247
+249
+255
+245
+247
+254
+242
+246
+252
+240
+242
+249
+237
+239
+242
+230
+230
+231
+221
+219
+223
+216
+210
+219
+215
+206
+221
+219
+207
+224
+222
+210
+223
+225
+214
+221
+228
+220
+207
+216
+211
+197
+206
+201
+60
+57
+52
+59
+56
+49
+56
+53
+48
+53
+50
+43
+52
+49
+42
+52
+49
+42
+53
+50
+43
+54
+51
+44
+55
+52
+45
+56
+53
+46
+57
+54
+47
+59
+56
+49
+61
+58
+49
+63
+60
+51
+65
+62
+53
+67
+63
+52
+74
+66
+55
+77
+67
+55
+80
+71
+56
+83
+74
+59
+87
+75
+59
+85
+76
+61
+85
+75
+63
+83
+74
+67
+83
+74
+75
+93
+87
+99
+110
+108
+130
+130
+130
+166
+145
+149
+197
+154
+160
+218
+159
+166
+234
+162
+169
+241
+161
+165
+239
+158
+160
+235
+153
+155
+229
+149
+152
+221
+148
+149
+214
+144
+145
+202
+137
+137
+189
+130
+131
+177
+122
+121
+161
+114
+113
+145
+102
+99
+126
+88
+86
+107
+80
+78
+92
+73
+71
+82
+70
+67
+76
+67
+66
+74
+63
+63
+75
+61
+61
+71
+59
+58
+64
+59
+57
+58
+60
+57
+52
+63
+59
+47
+67
+61
+45
+69
+64
+44
+70
+64
+42
+70
+65
+43
+69
+66
+47
+69
+67
+52
+67
+67
+55
+66
+67
+59
+65
+67
+62
+65
+65
+65
+69
+59
+67
+71
+61
+70
+71
+64
+72
+71
+68
+75
+70
+71
+76
+67
+72
+75
+63
+72
+71
+62
+71
+66
+67
+72
+65
+65
+61
+52
+75
+58
+48
+102
+70
+59
+128
+80
+70
+138
+74
+64
+140
+63
+53
+146
+56
+45
+164
+62
+47
+169
+62
+44
+171
+62
+42
+172
+63
+43
+173
+64
+44
+175
+64
+45
+176
+63
+45
+177
+60
+42
+177
+56
+39
+182
+56
+41
+189
+57
+42
+195
+57
+44
+200
+56
+45
+204
+56
+46
+210
+57
+49
+212
+59
+53
+207
+58
+52
+205
+58
+51
+203
+56
+49
+203
+56
+49
+204
+57
+50
+205
+58
+50
+204
+55
+48
+203
+54
+47
+211
+60
+53
+213
+62
+53
+210
+57
+49
+204
+50
+40
+206
+52
+42
+216
+59
+50
+218
+60
+51
+215
+51
+42
+228
+49
+42
+233
+49
+39
+236
+49
+42
+238
+50
+41
+240
+49
+41
+242
+47
+41
+244
+45
+40
+246
+44
+40
+247
+45
+41
+244
+47
+41
+240
+49
+41
+233
+51
+40
+226
+53
+39
+217
+54
+37
+210
+55
+33
+207
+55
+32
+212
+57
+37
+213
+56
+37
+211
+54
+37
+209
+52
+37
+210
+52
+40
+211
+55
+43
+210
+56
+46
+208
+55
+47
+227
+78
+71
+232
+88
+80
+231
+90
+83
+218
+81
+73
+204
+71
+62
+196
+68
+57
+191
+64
+55
+185
+62
+47
+185
+60
+42
+185
+60
+38
+185
+60
+40
+185
+58
+39
+184
+57
+40
+186
+59
+42
+192
+62
+48
+195
+65
+52
+201
+68
+59
+198
+64
+55
+201
+64
+58
+209
+70
+67
+213
+73
+72
+214
+72
+71
+216
+71
+74
+223
+73
+75
+230
+70
+72
+232
+66
+68
+237
+68
+73
+245
+76
+83
+252
+81
+90
+251
+79
+93
+251
+76
+93
+251
+75
+96
+246
+68
+94
+247
+68
+97
+249
+70
+102
+253
+73
+108
+255
+78
+117
+255
+79
+120
+255
+79
+120
+255
+80
+119
+246
+85
+119
+242
+84
+117
+244
+84
+118
+250
+89
+120
+255
+93
+123
+255
+92
+119
+247
+83
+107
+236
+74
+95
+246
+89
+106
+239
+87
+102
+227
+79
+93
+239
+94
+107
+218
+78
+89
+223
+86
+96
+222
+86
+96
+210
+89
+96
+191
+99
+100
+199
+128
+124
+230
+169
+166
+255
+208
+207
+255
+233
+231
+255
+241
+240
+255
+246
+247
+254
+252
+253
+251
+252
+255
+249
+253
+255
+248
+252
+255
+250
+251
+253
+250
+250
+252
+249
+249
+249
+250
+249
+247
+252
+248
+245
+255
+250
+246
+255
+250
+247
+255
+251
+250
+255
+250
+249
+255
+247
+247
+254
+242
+242
+252
+237
+240
+249
+234
+237
+240
+225
+228
+233
+221
+221
+228
+217
+213
+226
+217
+210
+230
+223
+213
+235
+231
+219
+241
+237
+225
+241
+241
+229
+236
+243
+236
+220
+231
+227
+208
+219
+215
+64
+61
+54
+61
+58
+51
+58
+55
+48
+55
+52
+45
+53
+50
+43
+53
+50
+43
+53
+50
+43
+54
+51
+44
+55
+52
+45
+55
+52
+45
+57
+54
+47
+59
+56
+49
+61
+58
+49
+63
+60
+51
+64
+61
+52
+66
+62
+51
+74
+66
+55
+77
+67
+55
+82
+70
+56
+86
+74
+58
+87
+75
+59
+88
+76
+60
+87
+75
+63
+84
+73
+67
+83
+74
+77
+94
+88
+102
+112
+109
+136
+130
+132
+171
+145
+151
+203
+156
+164
+227
+163
+173
+245
+167
+176
+253
+170
+177
+255
+166
+172
+250
+161
+167
+243
+160
+164
+238
+159
+163
+234
+157
+161
+225
+153
+155
+214
+149
+150
+204
+146
+146
+196
+137
+136
+180
+121
+121
+159
+106
+105
+139
+96
+93
+124
+88
+85
+112
+82
+80
+104
+79
+77
+101
+78
+74
+99
+75
+71
+94
+70
+66
+83
+64
+61
+72
+63
+58
+62
+63
+58
+54
+64
+60
+49
+65
+62
+47
+67
+64
+47
+67
+66
+48
+66
+67
+51
+66
+68
+55
+63
+68
+61
+62
+68
+64
+60
+69
+68
+59
+66
+72
+65
+67
+82
+71
+72
+92
+80
+81
+99
+89
+91
+106
+95
+97
+110
+99
+99
+109
+99
+98
+104
+101
+95
+97
+102
+88
+87
+95
+74
+69
+106
+72
+63
+130
+83
+73
+146
+88
+76
+143
+76
+60
+142
+65
+49
+150
+63
+46
+167
+66
+48
+174
+64
+47
+174
+65
+45
+175
+64
+45
+176
+65
+46
+180
+65
+47
+178
+61
+43
+176
+55
+38
+181
+55
+40
+188
+56
+43
+194
+56
+43
+200
+56
+45
+205
+54
+45
+209
+55
+47
+213
+56
+49
+216
+59
+52
+210
+55
+50
+208
+55
+50
+208
+55
+50
+209
+56
+50
+212
+57
+52
+212
+57
+52
+211
+56
+51
+211
+54
+47
+222
+65
+58
+213
+56
+47
+209
+51
+42
+214
+56
+47
+222
+61
+53
+222
+61
+53
+218
+57
+49
+220
+53
+44
+231
+50
+41
+235
+48
+39
+239
+48
+40
+241
+48
+41
+244
+47
+41
+247
+45
+41
+247
+44
+40
+247
+44
+40
+247
+45
+41
+244
+47
+41
+238
+50
+41
+233
+52
+41
+225
+53
+39
+218
+55
+38
+212
+55
+36
+207
+56
+35
+206
+55
+34
+207
+56
+37
+206
+55
+36
+207
+54
+38
+208
+55
+41
+210
+57
+43
+209
+55
+43
+206
+52
+42
+203
+52
+43
+227
+78
+71
+243
+100
+92
+235
+96
+89
+213
+79
+70
+196
+65
+55
+186
+59
+50
+181
+57
+45
+184
+62
+41
+184
+62
+39
+185
+60
+38
+185
+59
+37
+186
+57
+38
+189
+57
+42
+192
+60
+47
+196
+62
+50
+202
+68
+57
+202
+65
+57
+206
+69
+63
+213
+75
+72
+211
+76
+73
+206
+71
+68
+205
+69
+69
+214
+72
+71
+227
+73
+73
+230
+67
+68
+232
+69
+72
+242
+77
+83
+248
+83
+90
+249
+82
+92
+247
+79
+94
+250
+79
+97
+244
+72
+94
+245
+71
+96
+248
+71
+100
+251
+73
+105
+255
+78
+114
+255
+81
+120
+255
+82
+121
+255
+84
+122
+239
+84
+116
+239
+90
+119
+249
+96
+126
+253
+96
+125
+249
+86
+113
+242
+78
+103
+245
+81
+105
+253
+90
+109
+251
+93
+108
+255
+102
+116
+235
+80
+94
+243
+88
+102
+238
+83
+97
+246
+90
+104
+237
+79
+94
+223
+83
+94
+190
+92
+93
+188
+114
+111
+216
+152
+150
+249
+198
+195
+255
+226
+225
+255
+235
+233
+254
+242
+242
+255
+255
+253
+252
+255
+255
+251
+255
+255
+248
+255
+255
+249
+255
+253
+249
+253
+252
+250
+252
+249
+252
+251
+247
+253
+249
+246
+253
+248
+244
+255
+248
+245
+255
+249
+248
+255
+249
+248
+255
+245
+245
+251
+239
+239
+247
+232
+235
+243
+229
+229
+235
+221
+221
+232
+218
+217
+228
+217
+211
+232
+222
+213
+240
+232
+221
+249
+243
+229
+255
+250
+236
+254
+254
+242
+244
+250
+246
+227
+237
+236
+214
+224
+223
+66
+62
+53
+65
+61
+52
+64
+60
+51
+62
+58
+49
+60
+56
+47
+58
+54
+45
+56
+52
+43
+55
+51
+42
+54
+50
+41
+54
+50
+41
+55
+51
+42
+56
+52
+43
+59
+54
+48
+62
+57
+51
+65
+60
+54
+69
+62
+54
+73
+64
+55
+77
+67
+55
+82
+70
+56
+85
+73
+57
+87
+74
+58
+88
+75
+59
+90
+76
+65
+91
+78
+72
+84
+73
+77
+88
+82
+96
+103
+100
+129
+124
+126
+167
+141
+146
+202
+151
+160
+227
+158
+170
+246
+165
+176
+255
+170
+179
+255
+171
+178
+255
+172
+180
+255
+172
+178
+252
+170
+177
+249
+170
+175
+243
+168
+172
+236
+169
+171
+232
+159
+161
+218
+153
+154
+210
+141
+141
+193
+129
+127
+177
+116
+114
+161
+104
+101
+146
+93
+90
+135
+88
+82
+126
+88
+81
+122
+89
+81
+118
+86
+79
+110
+77
+72
+95
+67
+63
+77
+63
+58
+64
+63
+59
+58
+66
+63
+56
+62
+62
+52
+64
+66
+53
+66
+69
+58
+63
+68
+61
+60
+66
+62
+58
+67
+66
+62
+70
+72
+65
+75
+84
+70
+85
+106
+85
+101
+126
+101
+113
+137
+108
+114
+136
+119
+117
+139
+131
+119
+139
+132
+111
+126
+128
+95
+106
+137
+91
+101
+144
+88
+91
+157
+87
+87
+164
+87
+81
+162
+78
+68
+154
+65
+51
+151
+58
+40
+158
+59
+40
+167
+60
+42
+172
+61
+42
+174
+63
+44
+177
+64
+46
+179
+64
+45
+180
+63
+45
+182
+61
+44
+185
+59
+44
+186
+54
+39
+190
+54
+40
+196
+54
+42
+203
+55
+45
+209
+55
+45
+214
+56
+47
+218
+57
+49
+218
+56
+51
+215
+56
+52
+216
+57
+53
+217
+58
+54
+216
+57
+51
+216
+54
+49
+216
+54
+49
+218
+56
+51
+221
+58
+51
+230
+67
+60
+224
+61
+54
+218
+55
+48
+227
+64
+55
+254
+91
+82
+255
+108
+99
+255
+93
+84
+231
+63
+54
+229
+51
+41
+237
+50
+41
+241
+50
+42
+244
+47
+41
+244
+42
+38
+245
+40
+37
+248
+40
+38
+248
+43
+40
+247
+45
+43
+243
+48
+44
+237
+50
+43
+227
+49
+39
+218
+48
+35
+212
+49
+34
+212
+52
+36
+211
+58
+40
+204
+59
+38
+202
+60
+40
+205
+60
+41
+207
+60
+42
+210
+58
+44
+210
+57
+43
+210
+56
+44
+209
+55
+45
+218
+64
+56
+207
+56
+49
+220
+71
+65
+244
+99
+94
+229
+88
+81
+203
+66
+60
+197
+64
+59
+183
+52
+42
+183
+58
+38
+182
+60
+36
+185
+60
+38
+186
+60
+38
+189
+58
+40
+191
+58
+43
+196
+60
+48
+198
+62
+50
+199
+62
+52
+204
+67
+59
+217
+80
+74
+223
+88
+82
+212
+79
+74
+195
+63
+58
+192
+63
+58
+207
+72
+68
+222
+72
+71
+226
+71
+69
+230
+74
+75
+239
+80
+84
+241
+82
+87
+239
+78
+86
+237
+75
+88
+241
+76
+92
+249
+82
+102
+248
+79
+102
+247
+75
+101
+247
+74
+102
+252
+77
+108
+255
+81
+115
+255
+82
+118
+253
+82
+118
+245
+88
+119
+239
+89
+118
+243
+89
+117
+251
+92
+120
+255
+93
+120
+255
+91
+115
+254
+88
+110
+252
+86
+106
+255
+101
+117
+247
+89
+103
+253
+95
+109
+252
+94
+108
+234
+73
+88
+235
+73
+88
+251
+84
+101
+233
+88
+101
+198
+102
+103
+173
+103
+101
+203
+142
+139
+232
+181
+178
+249
+209
+207
+255
+234
+231
+254
+238
+238
+252
+248
+247
+246
+250
+249
+247
+255
+253
+247
+255
+254
+246
+255
+252
+248
+254
+252
+253
+255
+252
+253
+252
+248
+251
+247
+244
+255
+250
+246
+255
+250
+246
+255
+247
+244
+253
+243
+241
+255
+244
+244
+255
+243
+243
+246
+232
+232
+231
+217
+217
+228
+214
+213
+223
+209
+206
+225
+214
+208
+241
+231
+222
+252
+244
+231
+253
+247
+231
+255
+251
+232
+255
+255
+243
+249
+254
+248
+231
+240
+239
+218
+227
+226
+67
+63
+54
+66
+62
+51
+65
+61
+52
+63
+59
+50
+61
+57
+48
+59
+55
+46
+58
+54
+45
+57
+53
+44
+55
+51
+42
+55
+51
+42
+55
+51
+42
+56
+52
+43
+58
+53
+47
+61
+56
+50
+64
+59
+53
+68
+61
+53
+72
+63
+54
+76
+66
+54
+81
+69
+55
+84
+72
+56
+86
+73
+56
+87
+74
+57
+89
+75
+62
+90
+77
+69
+85
+74
+78
+87
+81
+95
+101
+98
+127
+121
+123
+164
+138
+143
+201
+148
+157
+226
+155
+166
+245
+163
+174
+254
+171
+180
+255
+172
+181
+255
+174
+182
+255
+175
+183
+255
+176
+183
+255
+175
+182
+252
+175
+180
+248
+175
+178
+245
+169
+170
+235
+162
+163
+227
+152
+152
+216
+140
+138
+201
+128
+127
+187
+117
+113
+174
+105
+101
+160
+99
+94
+152
+96
+87
+142
+96
+86
+136
+93
+84
+127
+86
+80
+116
+77
+73
+98
+70
+67
+84
+66
+65
+73
+65
+65
+67
+60
+60
+58
+65
+66
+61
+70
+69
+65
+67
+68
+63
+65
+63
+64
+68
+66
+69
+79
+77
+82
+88
+86
+99
+102
+103
+131
+116
+116
+150
+130
+125
+157
+138
+125
+155
+149
+124
+154
+160
+124
+150
+165
+113
+136
+164
+96
+117
+172
+89
+107
+180
+87
+98
+185
+81
+88
+181
+73
+71
+173
+64
+57
+168
+60
+47
+168
+61
+41
+169
+63
+41
+167
+56
+37
+168
+55
+37
+171
+56
+38
+174
+57
+40
+176
+56
+39
+178
+57
+40
+181
+55
+40
+184
+54
+40
+187
+51
+37
+194
+52
+40
+202
+55
+45
+211
+58
+50
+217
+60
+51
+222
+61
+53
+223
+60
+53
+223
+60
+53
+225
+62
+57
+223
+60
+55
+223
+60
+55
+225
+62
+57
+229
+66
+61
+232
+67
+61
+231
+66
+60
+230
+65
+59
+229
+64
+58
+230
+66
+57
+228
+64
+55
+220
+56
+47
+213
+49
+40
+216
+54
+43
+235
+73
+62
+255
+91
+79
+241
+64
+54
+238
+54
+44
+234
+43
+35
+238
+41
+35
+248
+45
+41
+255
+47
+45
+254
+44
+43
+246
+40
+40
+250
+48
+46
+245
+52
+47
+239
+54
+49
+231
+54
+46
+222
+51
+41
+214
+50
+38
+212
+50
+37
+207
+54
+38
+203
+58
+39
+200
+59
+39
+202
+60
+40
+205
+58
+40
+207
+57
+42
+208
+55
+41
+209
+53
+41
+208
+52
+40
+211
+57
+47
+207
+53
+45
+212
+61
+54
+229
+80
+74
+229
+84
+81
+219
+76
+72
+205
+66
+63
+183
+49
+40
+188
+59
+40
+187
+61
+38
+189
+60
+39
+190
+59
+39
+190
+57
+40
+192
+56
+40
+194
+58
+44
+196
+58
+47
+200
+62
+52
+203
+66
+56
+213
+79
+70
+220
+87
+80
+210
+82
+73
+195
+68
+61
+191
+67
+59
+204
+72
+67
+219
+76
+72
+223
+74
+70
+229
+77
+76
+235
+83
+82
+237
+84
+87
+235
+80
+86
+233
+78
+86
+236
+79
+90
+247
+86
+102
+248
+85
+104
+249
+83
+105
+250
+82
+107
+252
+82
+109
+255
+83
+113
+255
+83
+116
+254
+83
+117
+241
+76
+108
+245
+84
+115
+255
+92
+121
+255
+96
+123
+255
+91
+117
+253
+85
+110
+250
+82
+105
+249
+84
+101
+249
+87
+102
+242
+84
+98
+249
+93
+104
+249
+93
+104
+236
+82
+94
+241
+87
+99
+247
+93
+105
+217
+86
+94
+182
+96
+95
+153
+92
+87
+185
+127
+125
+218
+169
+165
+239
+199
+197
+254
+224
+222
+251
+233
+233
+253
+248
+245
+248
+250
+247
+247
+255
+253
+247
+255
+254
+245
+255
+252
+248
+254
+252
+253
+255
+252
+254
+253
+251
+252
+248
+245
+253
+250
+245
+254
+249
+245
+252
+247
+243
+252
+244
+241
+255
+245
+244
+255
+244
+244
+245
+233
+233
+234
+220
+219
+229
+215
+212
+222
+209
+203
+223
+213
+204
+239
+229
+219
+252
+245
+229
+255
+249
+231
+255
+252
+232
+255
+255
+239
+248
+253
+246
+232
+241
+238
+221
+227
+225
+69
+65
+54
+69
+65
+53
+67
+63
+52
+65
+61
+50
+63
+59
+48
+61
+57
+46
+60
+56
+45
+59
+55
+44
+56
+52
+43
+56
+52
+43
+55
+51
+42
+56
+52
+43
+58
+53
+47
+61
+56
+50
+63
+58
+52
+67
+60
+52
+71
+62
+53
+74
+66
+55
+78
+68
+56
+82
+70
+54
+84
+71
+54
+87
+71
+55
+89
+73
+60
+89
+74
+67
+87
+75
+75
+88
+80
+93
+98
+94
+121
+115
+117
+156
+133
+138
+194
+144
+153
+220
+152
+164
+240
+160
+171
+250
+170
+179
+254
+173
+181
+254
+175
+183
+255
+177
+185
+255
+179
+186
+255
+180
+187
+255
+181
+185
+255
+181
+185
+255
+175
+178
+249
+172
+172
+244
+163
+163
+235
+153
+151
+224
+142
+141
+211
+131
+128
+199
+120
+117
+188
+115
+109
+179
+107
+96
+162
+105
+93
+155
+99
+90
+145
+93
+87
+133
+86
+82
+119
+78
+75
+104
+69
+68
+86
+64
+64
+76
+56
+53
+60
+65
+60
+64
+75
+65
+66
+76
+64
+66
+81
+62
+66
+90
+69
+74
+112
+87
+93
+130
+99
+115
+152
+115
+149
+165
+122
+165
+175
+127
+167
+178
+123
+162
+184
+118
+154
+192
+112
+147
+194
+99
+131
+192
+84
+110
+193
+71
+94
+207
+76
+92
+207
+73
+82
+195
+61
+62
+183
+54
+48
+180
+58
+43
+178
+61
+41
+173
+61
+39
+175
+60
+41
+176
+59
+41
+178
+58
+41
+180
+59
+42
+183
+60
+44
+187
+60
+45
+192
+60
+45
+196
+60
+46
+196
+54
+42
+203
+56
+46
+211
+60
+49
+217
+63
+53
+223
+65
+56
+225
+62
+55
+224
+60
+51
+223
+58
+52
+220
+55
+49
+217
+52
+46
+216
+51
+45
+222
+57
+51
+230
+65
+59
+236
+69
+63
+233
+66
+60
+228
+61
+53
+227
+60
+52
+219
+52
+44
+216
+52
+43
+219
+55
+45
+212
+50
+39
+204
+44
+32
+214
+54
+42
+233
+71
+58
+245
+75
+62
+242
+64
+54
+239
+52
+45
+240
+45
+41
+246
+44
+42
+250
+44
+44
+252
+44
+44
+248
+42
+44
+240
+42
+41
+236
+47
+43
+232
+50
+46
+227
+53
+46
+220
+52
+43
+216
+49
+40
+213
+49
+39
+209
+51
+39
+205
+55
+40
+203
+58
+41
+205
+58
+40
+208
+58
+41
+210
+59
+42
+211
+58
+42
+212
+56
+43
+212
+56
+44
+209
+52
+43
+214
+60
+52
+213
+58
+53
+213
+60
+55
+229
+79
+78
+237
+89
+87
+217
+69
+69
+194
+51
+47
+192
+59
+44
+191
+60
+40
+192
+59
+42
+191
+58
+41
+193
+57
+41
+192
+56
+40
+192
+56
+42
+192
+56
+44
+198
+61
+51
+199
+65
+54
+207
+74
+65
+216
+85
+75
+210
+82
+71
+198
+71
+62
+192
+68
+58
+199
+71
+62
+214
+75
+68
+216
+73
+67
+221
+76
+73
+228
+83
+80
+229
+83
+84
+226
+80
+83
+226
+77
+83
+229
+78
+87
+242
+88
+100
+246
+90
+104
+253
+91
+112
+254
+90
+114
+252
+86
+110
+250
+82
+108
+251
+81
+108
+255
+81
+112
+248
+70
+106
+255
+79
+116
+255
+89
+123
+255
+90
+121
+255
+86
+113
+252
+84
+107
+254
+87
+107
+255
+92
+109
+250
+89
+104
+247
+91
+104
+248
+98
+109
+242
+98
+107
+231
+96
+103
+234
+105
+110
+229
+106
+109
+197
+94
+95
+160
+93
+87
+126
+77
+70
+155
+108
+102
+195
+151
+148
+223
+185
+182
+241
+211
+209
+244
+224
+223
+255
+245
+244
+249
+249
+247
+249
+255
+253
+247
+255
+255
+245
+255
+252
+248
+254
+252
+253
+255
+254
+255
+252
+253
+252
+248
+247
+252
+249
+244
+252
+249
+242
+250
+247
+242
+251
+246
+242
+255
+247
+244
+255
+246
+244
+249
+238
+236
+239
+228
+226
+230
+219
+215
+220
+209
+203
+221
+211
+201
+238
+228
+216
+253
+246
+228
+255
+251
+232
+255
+253
+231
+255
+255
+236
+248
+251
+242
+233
+239
+235
+224
+229
+225
+73
+69
+57
+72
+68
+56
+70
+66
+54
+68
+64
+52
+66
+62
+51
+64
+60
+49
+63
+59
+48
+62
+58
+47
+58
+54
+45
+57
+53
+44
+57
+53
+44
+57
+53
+44
+58
+53
+47
+60
+55
+49
+62
+57
+51
+64
+59
+53
+69
+62
+54
+73
+64
+55
+76
+68
+55
+79
+70
+53
+82
+69
+52
+85
+69
+53
+87
+71
+56
+87
+73
+62
+88
+77
+75
+88
+78
+87
+94
+90
+113
+112
+112
+150
+128
+134
+186
+140
+150
+212
+149
+161
+233
+157
+169
+245
+168
+176
+249
+169
+177
+249
+173
+179
+253
+176
+183
+255
+177
+183
+255
+178
+185
+255
+180
+184
+255
+180
+184
+255
+175
+177
+252
+171
+173
+248
+165
+167
+242
+159
+158
+234
+151
+150
+226
+140
+139
+215
+130
+129
+205
+125
+121
+197
+117
+109
+182
+112
+103
+170
+102
+96
+158
+95
+90
+144
+89
+88
+132
+81
+81
+117
+71
+71
+99
+65
+62
+81
+61
+53
+68
+72
+56
+66
+84
+61
+67
+96
+64
+69
+110
+67
+74
+128
+79
+85
+150
+93
+100
+170
+103
+120
+189
+108
+141
+201
+110
+153
+203
+111
+152
+201
+105
+143
+198
+97
+131
+199
+88
+120
+198
+73
+103
+196
+59
+85
+197
+51
+72
+216
+65
+80
+223
+69
+79
+208
+60
+60
+195
+56
+49
+194
+64
+50
+186
+65
+44
+175
+59
+36
+173
+54
+34
+173
+53
+36
+174
+53
+36
+179
+53
+38
+182
+55
+40
+188
+56
+43
+195
+59
+45
+200
+60
+47
+211
+64
+54
+215
+64
+55
+218
+64
+54
+220
+63
+54
+222
+61
+53
+222
+57
+51
+221
+54
+46
+219
+52
+44
+211
+46
+40
+210
+45
+39
+211
+46
+40
+216
+51
+45
+225
+58
+52
+227
+60
+52
+225
+56
+49
+220
+53
+45
+220
+53
+45
+208
+44
+34
+205
+41
+31
+217
+55
+44
+226
+66
+54
+220
+63
+48
+208
+52
+37
+203
+46
+31
+233
+70
+55
+243
+73
+60
+253
+72
+63
+252
+60
+55
+244
+45
+42
+241
+35
+37
+245
+39
+41
+251
+47
+50
+241
+45
+46
+235
+47
+46
+228
+50
+46
+222
+51
+44
+218
+49
+42
+215
+48
+42
+214
+47
+41
+211
+48
+39
+211
+55
+42
+210
+57
+43
+214
+58
+43
+216
+60
+45
+218
+62
+47
+219
+63
+48
+220
+64
+51
+220
+64
+51
+210
+54
+42
+230
+76
+66
+229
+74
+69
+206
+53
+48
+223
+71
+70
+243
+90
+92
+223
+73
+75
+213
+65
+63
+200
+60
+47
+196
+59
+43
+195
+58
+42
+195
+58
+42
+194
+58
+42
+194
+58
+42
+193
+57
+43
+190
+57
+42
+194
+60
+48
+194
+62
+50
+200
+70
+57
+207
+79
+66
+206
+80
+68
+198
+72
+60
+191
+67
+55
+193
+67
+55
+206
+72
+63
+209
+70
+63
+213
+74
+69
+219
+80
+75
+221
+82
+79
+217
+77
+76
+218
+75
+77
+220
+75
+80
+235
+88
+96
+243
+91
+103
+252
+97
+113
+255
+97
+117
+250
+88
+109
+245
+79
+103
+245
+77
+103
+253
+78
+107
+255
+76
+112
+255
+79
+116
+255
+83
+115
+255
+82
+110
+250
+84
+108
+252
+90
+111
+255
+99
+117
+255
+105
+120
+255
+102
+117
+250
+98
+111
+244
+98
+109
+236
+101
+108
+224
+103
+108
+212
+106
+106
+200
+106
+104
+177
+104
+97
+141
+94
+84
+104
+70
+60
+130
+93
+85
+172
+135
+129
+206
+171
+169
+229
+199
+197
+239
+218
+217
+255
+243
+243
+251
+247
+246
+249
+253
+252
+248
+255
+255
+245
+255
+254
+248
+254
+254
+255
+255
+255
+255
+251
+255
+254
+248
+248
+251
+250
+245
+250
+250
+242
+249
+248
+243
+253
+250
+245
+255
+251
+247
+255
+250
+247
+253
+243
+241
+247
+236
+232
+235
+224
+218
+223
+213
+204
+222
+212
+202
+237
+230
+214
+254
+247
+228
+255
+254
+232
+255
+254
+229
+255
+254
+233
+247
+249
+238
+234
+239
+232
+228
+231
+224
+78
+72
+58
+77
+71
+57
+76
+70
+56
+74
+68
+54
+72
+66
+54
+70
+64
+52
+68
+61
+51
+67
+60
+50
+63
+56
+48
+62
+55
+47
+61
+54
+46
+61
+54
+46
+61
+54
+48
+62
+55
+49
+64
+57
+51
+63
+58
+52
+67
+62
+56
+69
+65
+56
+75
+67
+56
+78
+69
+54
+81
+68
+51
+82
+69
+50
+86
+70
+54
+86
+72
+59
+90
+77
+71
+86
+77
+82
+91
+87
+104
+108
+107
+139
+126
+130
+177
+138
+147
+206
+146
+159
+227
+154
+166
+238
+166
+174
+247
+169
+175
+249
+173
+176
+253
+175
+179
+253
+176
+179
+255
+176
+180
+254
+176
+179
+255
+175
+179
+253
+171
+174
+251
+168
+171
+248
+164
+167
+244
+160
+162
+239
+154
+156
+233
+147
+149
+226
+138
+140
+217
+134
+133
+209
+131
+127
+201
+123
+117
+187
+109
+107
+172
+100
+101
+158
+95
+97
+146
+89
+91
+132
+82
+81
+115
+78
+72
+98
+87
+70
+89
+95
+67
+81
+109
+66
+76
+129
+69
+77
+152
+77
+84
+172
+85
+93
+188
+91
+98
+202
+90
+104
+214
+84
+112
+223
+83
+118
+222
+84
+117
+215
+80
+110
+208
+74
+99
+203
+67
+89
+198
+57
+74
+194
+47
+63
+211
+57
+69
+225
+68
+77
+228
+72
+75
+215
+63
+60
+205
+62
+54
+203
+71
+58
+194
+73
+52
+182
+63
+41
+183
+62
+43
+184
+61
+45
+186
+60
+45
+189
+62
+47
+195
+63
+48
+202
+66
+52
+208
+68
+55
+213
+69
+58
+217
+69
+57
+218
+66
+55
+219
+62
+53
+217
+59
+50
+217
+54
+45
+217
+53
+44
+218
+51
+43
+215
+51
+42
+212
+49
+42
+215
+52
+45
+218
+55
+46
+221
+57
+48
+223
+56
+48
+222
+55
+47
+221
+54
+46
+220
+53
+44
+214
+47
+38
+217
+53
+43
+215
+55
+43
+207
+50
+35
+205
+49
+34
+210
+57
+41
+213
+62
+45
+212
+59
+41
+216
+60
+45
+230
+68
+55
+248
+74
+65
+253
+68
+63
+249
+54
+52
+245
+42
+45
+246
+42
+45
+247
+47
+50
+247
+54
+55
+237
+53
+53
+226
+51
+48
+218
+49
+44
+215
+48
+42
+215
+47
+44
+217
+48
+45
+217
+48
+43
+227
+56
+49
+228
+57
+49
+226
+58
+49
+226
+59
+50
+224
+60
+48
+223
+61
+48
+220
+63
+48
+218
+62
+49
+209
+55
+43
+239
+87
+76
+248
+97
+90
+211
+59
+54
+209
+59
+58
+230
+80
+81
+220
+70
+72
+230
+80
+81
+207
+60
+52
+202
+58
+47
+198
+56
+44
+197
+57
+44
+196
+58
+45
+196
+60
+46
+195
+59
+45
+192
+59
+44
+190
+58
+45
+190
+60
+46
+195
+65
+51
+199
+72
+57
+199
+73
+59
+194
+68
+54
+190
+64
+50
+188
+62
+48
+201
+70
+60
+202
+69
+60
+206
+73
+66
+213
+80
+73
+215
+82
+77
+213
+78
+75
+211
+75
+75
+215
+76
+79
+233
+90
+96
+240
+94
+104
+252
+102
+114
+255
+104
+120
+252
+93
+113
+242
+80
+101
+243
+77
+101
+252
+79
+107
+255
+83
+117
+255
+82
+116
+254
+81
+111
+244
+82
+106
+243
+92
+111
+250
+103
+119
+253
+105
+119
+249
+101
+115
+253
+101
+116
+245
+94
+109
+239
+94
+107
+236
+106
+114
+221
+115
+117
+192
+107
+102
+168
+101
+92
+156
+110
+97
+127
+101
+86
+89
+71
+57
+110
+86
+74
+150
+123
+114
+190
+159
+156
+223
+193
+193
+238
+214
+214
+254
+238
+239
+254
+245
+246
+252
+252
+252
+249
+255
+255
+246
+255
+254
+249
+253
+254
+255
+255
+255
+255
+251
+255
+254
+248
+250
+253
+254
+248
+250
+253
+244
+250
+251
+245
+254
+253
+248
+255
+255
+250
+255
+253
+249
+255
+250
+244
+255
+246
+241
+242
+233
+226
+229
+221
+210
+225
+217
+204
+240
+233
+215
+255
+250
+228
+255
+255
+230
+255
+254
+229
+255
+254
+233
+246
+248
+234
+237
+240
+231
+232
+233
+225
+81
+75
+61
+80
+74
+60
+79
+73
+59
+77
+71
+57
+75
+69
+57
+73
+67
+55
+71
+64
+54
+71
+64
+54
+66
+59
+51
+65
+58
+50
+64
+57
+49
+63
+56
+48
+63
+56
+50
+63
+56
+50
+65
+58
+52
+64
+59
+53
+66
+63
+56
+69
+66
+57
+75
+69
+57
+77
+70
+54
+80
+69
+51
+82
+69
+50
+85
+70
+51
+85
+72
+55
+89
+76
+67
+85
+75
+76
+90
+83
+99
+105
+105
+133
+124
+129
+171
+137
+147
+200
+147
+158
+222
+154
+164
+235
+166
+172
+248
+169
+172
+251
+172
+173
+253
+173
+176
+255
+174
+177
+255
+174
+177
+254
+173
+176
+253
+173
+176
+253
+169
+172
+249
+167
+170
+247
+164
+168
+242
+162
+166
+240
+159
+163
+237
+154
+158
+232
+149
+153
+227
+146
+148
+222
+146
+146
+218
+137
+138
+205
+124
+128
+192
+115
+120
+178
+111
+117
+169
+109
+112
+157
+105
+103
+142
+106
+95
+125
+121
+95
+120
+130
+87
+106
+142
+80
+95
+163
+79
+92
+187
+83
+92
+205
+84
+93
+214
+80
+87
+218
+72
+83
+224
+65
+83
+228
+65
+84
+224
+69
+85
+217
+69
+81
+210
+69
+77
+204
+65
+70
+199
+59
+60
+198
+54
+54
+227
+74
+76
+229
+73
+74
+224
+66
+65
+211
+56
+52
+206
+57
+50
+206
+65
+55
+200
+68
+53
+190
+63
+46
+195
+69
+54
+195
+69
+54
+197
+70
+55
+201
+69
+56
+206
+70
+56
+209
+71
+58
+215
+71
+60
+218
+71
+61
+214
+62
+51
+213
+59
+49
+214
+56
+47
+213
+52
+44
+214
+51
+42
+216
+52
+43
+219
+52
+44
+218
+54
+45
+219
+56
+49
+221
+60
+52
+224
+61
+52
+223
+60
+51
+221
+57
+48
+220
+53
+45
+220
+53
+44
+219
+55
+45
+210
+46
+36
+221
+59
+48
+218
+61
+46
+205
+49
+34
+198
+45
+29
+206
+55
+38
+210
+61
+41
+205
+58
+38
+204
+57
+39
+212
+56
+41
+226
+58
+47
+243
+61
+57
+255
+64
+64
+255
+60
+62
+254
+51
+55
+243
+44
+47
+234
+44
+46
+225
+43
+42
+216
+42
+41
+212
+43
+40
+215
+47
+44
+222
+52
+52
+228
+56
+56
+233
+57
+57
+239
+55
+53
+240
+55
+52
+238
+55
+51
+232
+55
+49
+227
+55
+45
+220
+54
+42
+215
+53
+40
+209
+53
+38
+205
+53
+40
+231
+80
+69
+255
+109
+99
+219
+72
+65
+200
+52
+50
+215
+67
+67
+211
+62
+66
+234
+86
+86
+217
+65
+60
+210
+62
+52
+203
+56
+46
+198
+54
+43
+198
+58
+45
+198
+60
+47
+195
+62
+47
+193
+61
+46
+187
+57
+43
+187
+60
+45
+190
+63
+48
+192
+65
+50
+191
+65
+50
+189
+64
+46
+188
+61
+46
+187
+60
+45
+195
+67
+54
+196
+68
+57
+200
+72
+63
+208
+80
+71
+211
+82
+76
+208
+79
+73
+210
+78
+76
+213
+79
+78
+233
+94
+99
+238
+97
+103
+251
+105
+116
+255
+110
+122
+255
+100
+117
+245
+86
+106
+245
+81
+105
+254
+86
+111
+255
+86
+115
+255
+86
+113
+245
+87
+110
+238
+93
+110
+241
+109
+120
+247
+117
+127
+240
+106
+115
+227
+87
+98
+243
+95
+109
+245
+94
+109
+241
+96
+111
+241
+114
+125
+238
+135
+138
+206
+128
+124
+169
+117
+104
+151
+122
+106
+117
+106
+88
+82
+77
+58
+97
+85
+71
+132
+112
+103
+177
+149
+146
+221
+191
+191
+239
+213
+216
+253
+233
+235
+254
+244
+245
+252
+250
+251
+250
+254
+255
+248
+254
+254
+252
+253
+255
+255
+254
+255
+255
+250
+255
+255
+249
+253
+255
+255
+251
+248
+254
+244
+250
+253
+246
+255
+255
+250
+255
+255
+250
+255
+255
+248
+255
+252
+246
+255
+253
+245
+250
+241
+232
+238
+230
+219
+234
+226
+213
+245
+240
+221
+255
+251
+229
+255
+254
+229
+255
+254
+226
+255
+255
+231
+249
+250
+234
+242
+244
+231
+238
+240
+229
+83
+77
+61
+82
+76
+60
+81
+75
+61
+79
+73
+59
+77
+71
+57
+75
+69
+55
+74
+68
+56
+73
+67
+55
+69
+62
+52
+68
+61
+51
+66
+59
+51
+65
+58
+50
+64
+57
+51
+65
+58
+52
+65
+57
+54
+64
+59
+55
+65
+64
+59
+67
+67
+59
+73
+69
+57
+77
+71
+55
+79
+71
+50
+82
+70
+48
+85
+70
+49
+85
+72
+53
+87
+75
+63
+82
+72
+70
+88
+82
+94
+106
+103
+130
+125
+129
+167
+137
+147
+196
+146
+158
+218
+152
+162
+231
+164
+167
+246
+166
+167
+250
+171
+169
+252
+171
+172
+254
+172
+173
+255
+173
+174
+254
+172
+174
+251
+172
+174
+251
+168
+172
+246
+166
+170
+244
+164
+168
+241
+163
+167
+240
+161
+168
+238
+160
+167
+237
+157
+164
+232
+155
+162
+230
+153
+158
+226
+146
+154
+219
+139
+147
+210
+134
+143
+202
+131
+141
+194
+132
+136
+183
+131
+129
+168
+136
+121
+154
+143
+109
+136
+154
+99
+122
+169
+88
+105
+187
+81
+95
+207
+77
+89
+224
+73
+82
+232
+65
+73
+232
+62
+65
+228
+62
+62
+222
+65
+60
+216
+69
+61
+210
+74
+60
+202
+75
+60
+194
+71
+53
+191
+68
+50
+195
+65
+49
+226
+86
+73
+223
+72
+63
+217
+60
+55
+216
+54
+51
+218
+56
+53
+216
+59
+54
+210
+57
+52
+200
+56
+48
+192
+58
+46
+190
+60
+46
+191
+59
+46
+192
+58
+46
+194
+56
+43
+195
+55
+42
+198
+52
+39
+198
+50
+38
+206
+52
+42
+208
+51
+42
+209
+51
+40
+212
+51
+41
+214
+51
+42
+217
+53
+44
+221
+54
+46
+220
+56
+47
+222
+61
+51
+219
+61
+50
+220
+59
+49
+219
+56
+47
+219
+55
+45
+218
+54
+44
+216
+52
+42
+215
+51
+41
+213
+51
+38
+211
+51
+37
+208
+52
+37
+207
+54
+38
+210
+61
+41
+209
+62
+42
+202
+57
+36
+192
+50
+28
+200
+58
+38
+202
+52
+37
+213
+49
+39
+231
+53
+49
+250
+60
+60
+255
+61
+64
+255
+55
+61
+247
+51
+55
+234
+45
+49
+225
+45
+46
+217
+45
+45
+215
+47
+46
+220
+52
+51
+227
+57
+58
+233
+59
+61
+240
+57
+61
+246
+50
+54
+248
+48
+51
+244
+48
+49
+237
+49
+47
+228
+49
+42
+222
+50
+40
+213
+49
+37
+207
+51
+36
+201
+49
+36
+209
+61
+49
+250
+106
+95
+228
+84
+76
+200
+57
+53
+208
+64
+63
+203
+58
+61
+228
+82
+83
+228
+74
+72
+220
+67
+61
+209
+58
+51
+201
+54
+46
+198
+56
+46
+197
+59
+48
+194
+60
+48
+191
+61
+47
+186
+59
+42
+188
+63
+45
+189
+64
+46
+188
+63
+45
+186
+59
+42
+186
+59
+40
+189
+59
+43
+190
+60
+44
+188
+62
+48
+188
+62
+50
+192
+68
+56
+200
+76
+66
+204
+80
+72
+202
+78
+70
+204
+76
+73
+208
+78
+76
+232
+97
+101
+236
+97
+102
+248
+104
+114
+255
+111
+123
+255
+104
+120
+247
+90
+107
+247
+85
+106
+253
+91
+114
+249
+91
+114
+244
+95
+115
+233
+98
+113
+227
+107
+116
+234
+125
+128
+242
+133
+136
+234
+118
+121
+222
+92
+100
+246
+101
+116
+255
+107
+124
+247
+98
+117
+238
+106
+119
+249
+144
+149
+239
+161
+159
+196
+148
+138
+163
+140
+124
+106
+105
+85
+73
+81
+60
+88
+85
+70
+117
+103
+92
+165
+140
+136
+220
+190
+190
+242
+213
+217
+249
+227
+230
+255
+242
+245
+255
+249
+251
+252
+253
+255
+249
+253
+255
+252
+253
+255
+255
+253
+255
+255
+251
+255
+255
+248
+253
+254
+255
+251
+247
+253
+243
+247
+253
+243
+253
+255
+247
+255
+255
+248
+255
+253
+246
+255
+251
+245
+255
+255
+246
+255
+250
+240
+246
+240
+226
+242
+236
+220
+251
+246
+226
+255
+252
+230
+254
+252
+227
+254
+253
+225
+255
+255
+230
+253
+254
+236
+248
+249
+235
+246
+246
+234
+86
+79
+63
+84
+78
+62
+83
+75
+62
+80
+74
+60
+79
+71
+58
+76
+70
+56
+76
+68
+55
+74
+68
+56
+72
+64
+53
+70
+64
+52
+69
+60
+51
+66
+59
+49
+66
+57
+50
+65
+58
+50
+67
+58
+51
+65
+60
+54
+67
+64
+57
+68
+68
+58
+74
+70
+58
+77
+71
+55
+79
+71
+50
+81
+70
+48
+84
+72
+50
+85
+72
+53
+85
+73
+61
+81
+71
+69
+87
+81
+93
+106
+104
+128
+126
+130
+168
+140
+148
+197
+147
+157
+216
+153
+162
+231
+159
+160
+242
+164
+160
+247
+166
+163
+250
+169
+166
+253
+169
+169
+255
+169
+171
+254
+169
+172
+253
+169
+172
+251
+165
+171
+245
+163
+170
+242
+163
+167
+238
+162
+167
+235
+164
+169
+237
+165
+170
+238
+165
+168
+237
+163
+167
+238
+152
+161
+230
+150
+161
+227
+148
+159
+221
+148
+159
+213
+149
+155
+203
+152
+150
+190
+158
+141
+175
+168
+132
+160
+164
+102
+127
+178
+93
+114
+193
+82
+99
+206
+74
+88
+218
+66
+78
+228
+62
+72
+235
+60
+67
+235
+61
+62
+231
+64
+58
+223
+67
+55
+216
+70
+55
+209
+74
+55
+199
+74
+52
+191
+71
+47
+189
+67
+44
+193
+64
+45
+225
+83
+69
+221
+68
+60
+221
+57
+55
+230
+62
+61
+236
+68
+67
+230
+64
+64
+219
+56
+57
+207
+53
+51
+205
+67
+57
+200
+68
+56
+201
+67
+56
+199
+65
+53
+198
+62
+50
+195
+57
+44
+194
+54
+41
+194
+50
+39
+198
+50
+40
+203
+51
+40
+206
+52
+42
+211
+53
+44
+216
+53
+46
+217
+52
+46
+219
+52
+46
+219
+52
+44
+228
+66
+55
+222
+60
+49
+218
+54
+44
+218
+54
+44
+223
+57
+45
+223
+57
+45
+219
+53
+41
+213
+49
+37
+216
+56
+40
+206
+49
+32
+202
+49
+33
+208
+57
+40
+206
+56
+39
+199
+52
+34
+202
+55
+37
+212
+67
+48
+200
+55
+38
+206
+56
+42
+215
+54
+44
+222
+53
+46
+230
+51
+47
+238
+53
+51
+246
+58
+57
+251
+63
+62
+255
+76
+75
+250
+72
+70
+242
+66
+66
+236
+62
+61
+234
+60
+61
+231
+55
+58
+229
+50
+54
+230
+44
+49
+244
+43
+49
+248
+41
+47
+244
+44
+46
+239
+47
+46
+232
+49
+43
+224
+52
+42
+217
+53
+41
+211
+55
+40
+198
+48
+33
+192
+46
+31
+244
+100
+89
+235
+93
+83
+207
+64
+58
+212
+68
+67
+203
+59
+59
+223
+77
+77
+234
+82
+81
+224
+72
+69
+211
+59
+54
+201
+54
+47
+198
+56
+46
+198
+57
+47
+195
+59
+45
+190
+58
+43
+190
+60
+44
+193
+64
+45
+192
+65
+46
+187
+60
+41
+183
+56
+37
+184
+57
+38
+189
+60
+41
+190
+63
+46
+181
+55
+41
+179
+55
+43
+184
+62
+49
+193
+71
+58
+197
+75
+64
+197
+73
+65
+200
+73
+66
+203
+74
+69
+229
+97
+95
+230
+94
+96
+241
+100
+106
+254
+110
+119
+254
+107
+117
+243
+93
+105
+240
+88
+101
+246
+94
+109
+248
+97
+116
+241
+100
+116
+229
+104
+112
+223
+110
+114
+233
+127
+127
+249
+141
+139
+247
+131
+132
+239
+110
+115
+253
+112
+121
+255
+120
+134
+245
+97
+113
+223
+88
+102
+246
+136
+145
+255
+180
+180
+211
+173
+162
+164
+153
+135
+96
+104
+80
+69
+81
+57
+82
+84
+63
+107
+97
+85
+156
+136
+129
+220
+192
+191
+244
+215
+217
+246
+224
+227
+255
+241
+244
+255
+248
+251
+253
+253
+255
+251
+252
+255
+252
+253
+255
+255
+253
+255
+255
+252
+255
+254
+249
+253
+250
+255
+249
+242
+254
+240
+242
+252
+241
+249
+255
+244
+253
+255
+247
+250
+252
+241
+254
+251
+242
+255
+255
+244
+255
+255
+243
+252
+246
+232
+248
+242
+226
+254
+249
+229
+255
+253
+231
+253
+251
+226
+253
+252
+224
+255
+255
+233
+255
+255
+241
+252
+252
+240
+251
+251
+239
+88
+79
+64
+87
+80
+64
+87
+78
+63
+85
+78
+62
+84
+75
+60
+82
+75
+59
+82
+73
+58
+80
+72
+59
+77
+67
+55
+75
+67
+54
+75
+65
+53
+72
+64
+51
+72
+62
+50
+71
+63
+50
+72
+62
+50
+70
+64
+52
+71
+67
+58
+71
+69
+57
+74
+71
+56
+78
+73
+54
+82
+74
+53
+85
+74
+52
+85
+74
+52
+86
+75
+57
+88
+78
+68
+85
+76
+77
+90
+84
+98
+107
+104
+131
+123
+126
+167
+137
+143
+195
+145
+153
+215
+152
+159
+231
+166
+162
+246
+167
+161
+249
+165
+160
+252
+164
+161
+252
+162
+163
+255
+163
+167
+255
+164
+170
+255
+164
+173
+252
+161
+170
+245
+161
+169
+241
+161
+168
+236
+164
+169
+237
+167
+170
+239
+172
+170
+243
+174
+170
+246
+171
+170
+246
+161
+168
+246
+156
+166
+238
+149
+160
+222
+152
+159
+211
+166
+164
+203
+180
+160
+188
+180
+135
+155
+179
+105
+120
+186
+78
+93
+205
+70
+84
+219
+65
+77
+227
+61
+73
+228
+61
+71
+227
+62
+69
+223
+64
+69
+223
+64
+68
+226
+61
+65
+221
+61
+61
+219
+70
+66
+200
+59
+52
+202
+68
+59
+202
+69
+60
+186
+49
+41
+219
+74
+69
+230
+75
+73
+233
+67
+69
+235
+62
+66
+232
+59
+63
+230
+60
+63
+225
+61
+62
+219
+59
+59
+212
+60
+57
+207
+66
+59
+200
+63
+55
+202
+68
+59
+209
+77
+65
+205
+75
+62
+191
+61
+48
+184
+54
+41
+189
+57
+44
+191
+55
+43
+195
+54
+44
+200
+53
+45
+203
+50
+42
+209
+47
+42
+212
+47
+43
+219
+50
+47
+224
+53
+46
+231
+65
+53
+224
+56
+43
+219
+49
+36
+222
+50
+38
+230
+57
+43
+231
+59
+45
+225
+55
+38
+215
+50
+31
+209
+50
+31
+206
+51
+31
+203
+52
+33
+201
+51
+34
+201
+51
+34
+203
+51
+37
+206
+53
+39
+207
+53
+41
+202
+48
+38
+207
+50
+41
+209
+53
+41
+210
+54
+42
+210
+52
+40
+213
+51
+38
+215
+51
+39
+220
+52
+41
+224
+50
+41
+230
+51
+46
+235
+53
+50
+235
+51
+51
+233
+47
+50
+231
+45
+50
+232
+45
+52
+237
+46
+53
+246
+45
+51
+246
+43
+47
+239
+43
+44
+236
+47
+45
+234
+53
+46
+227
+57
+44
+217
+55
+40
+208
+52
+37
+195
+45
+28
+196
+51
+34
+231
+88
+72
+233
+89
+78
+203
+59
+51
+223
+78
+73
+197
+52
+49
+218
+72
+72
+225
+79
+80
+220
+74
+74
+212
+67
+64
+204
+59
+54
+200
+56
+48
+198
+56
+44
+199
+57
+43
+200
+60
+43
+197
+60
+42
+194
+59
+40
+190
+57
+38
+188
+59
+40
+187
+60
+41
+186
+61
+41
+186
+61
+43
+183
+60
+44
+180
+56
+44
+181
+59
+48
+185
+61
+49
+187
+63
+51
+187
+63
+51
+190
+64
+52
+192
+64
+53
+196
+65
+55
+239
+106
+97
+245
+112
+105
+234
+99
+95
+244
+109
+106
+251
+113
+113
+236
+97
+100
+244
+103
+109
+255
+112
+121
+255
+107
+122
+251
+104
+120
+234
+103
+111
+226
+101
+105
+229
+103
+106
+237
+109
+110
+243
+110
+111
+245
+109
+111
+255
+119
+123
+255
+126
+133
+241
+95
+108
+241
+105
+119
+214
+103
+112
+248
+174
+175
+189
+167
+154
+133
+141
+117
+97
+112
+81
+74
+89
+58
+77
+81
+56
+115
+110
+90
+165
+149
+136
+205
+182
+176
+237
+213
+211
+255
+238
+240
+255
+244
+245
+255
+245
+249
+252
+247
+251
+251
+251
+253
+253
+254
+255
+254
+255
+255
+255
+254
+255
+251
+255
+254
+239
+255
+243
+229
+252
+232
+231
+249
+233
+240
+254
+237
+248
+255
+245
+252
+255
+244
+253
+255
+242
+255
+253
+240
+255
+253
+241
+255
+251
+238
+255
+250
+234
+255
+250
+230
+254
+249
+227
+252
+250
+225
+252
+250
+225
+251
+250
+229
+253
+253
+241
+255
+255
+250
+255
+255
+250
+89
+80
+65
+88
+79
+64
+88
+79
+64
+86
+77
+62
+85
+76
+61
+84
+75
+60
+83
+74
+59
+82
+73
+58
+78
+69
+54
+77
+68
+53
+76
+67
+52
+75
+66
+51
+74
+65
+50
+74
+65
+50
+74
+65
+50
+73
+65
+52
+71
+67
+56
+72
+68
+57
+76
+70
+56
+79
+72
+54
+82
+74
+53
+83
+75
+52
+86
+75
+55
+84
+75
+58
+88
+78
+69
+85
+76
+77
+89
+85
+99
+107
+104
+131
+123
+125
+166
+134
+140
+192
+141
+149
+211
+150
+154
+225
+161
+156
+236
+163
+155
+241
+161
+157
+244
+161
+158
+249
+160
+161
+253
+160
+165
+255
+162
+170
+255
+161
+172
+251
+160
+172
+244
+160
+171
+237
+158
+167
+232
+161
+166
+232
+164
+164
+234
+166
+164
+237
+166
+162
+238
+163
+160
+237
+163
+166
+243
+160
+164
+235
+160
+160
+220
+165
+155
+205
+177
+153
+189
+188
+143
+166
+189
+115
+130
+191
+87
+98
+204
+70
+77
+220
+63
+70
+230
+59
+67
+233
+58
+65
+230
+59
+67
+225
+62
+67
+219
+64
+68
+218
+65
+70
+224
+60
+67
+218
+57
+63
+218
+65
+68
+203
+59
+59
+204
+66
+63
+202
+64
+61
+193
+51
+49
+229
+79
+80
+230
+67
+70
+232
+63
+68
+234
+59
+66
+231
+56
+63
+226
+56
+59
+219
+56
+57
+213
+58
+56
+207
+59
+55
+212
+69
+63
+198
+61
+53
+197
+60
+52
+204
+71
+62
+204
+76
+65
+193
+67
+53
+184
+58
+44
+183
+57
+43
+185
+55
+42
+191
+55
+43
+198
+54
+45
+203
+52
+45
+209
+50
+46
+216
+51
+47
+225
+53
+51
+228
+56
+52
+229
+61
+50
+226
+58
+45
+225
+53
+41
+225
+52
+38
+228
+52
+39
+226
+53
+39
+221
+51
+34
+213
+50
+31
+211
+56
+36
+205
+56
+34
+201
+56
+37
+200
+58
+38
+204
+58
+43
+206
+58
+44
+207
+55
+44
+208
+51
+42
+213
+51
+46
+214
+53
+45
+211
+55
+43
+207
+55
+41
+201
+54
+38
+199
+52
+34
+203
+52
+33
+207
+52
+34
+216
+50
+36
+222
+50
+38
+227
+48
+43
+230
+46
+44
+230
+44
+45
+230
+44
+47
+230
+45
+50
+232
+46
+51
+236
+43
+46
+237
+44
+45
+236
+48
+46
+232
+50
+46
+224
+52
+42
+219
+53
+39
+213
+56
+39
+210
+57
+39
+213
+63
+46
+187
+42
+25
+214
+68
+53
+208
+62
+49
+217
+70
+62
+235
+86
+80
+218
+66
+63
+216
+66
+65
+231
+85
+86
+226
+82
+82
+220
+75
+72
+212
+67
+62
+205
+61
+53
+201
+57
+46
+200
+57
+43
+199
+56
+40
+200
+59
+42
+196
+59
+40
+191
+58
+39
+189
+60
+41
+189
+62
+43
+186
+63
+45
+185
+64
+47
+182
+62
+46
+178
+58
+44
+180
+59
+48
+183
+61
+48
+184
+62
+49
+186
+63
+48
+189
+63
+49
+193
+66
+51
+197
+67
+53
+235
+105
+92
+242
+109
+100
+231
+98
+91
+240
+107
+102
+245
+111
+108
+232
+98
+97
+241
+107
+108
+254
+115
+120
+255
+111
+126
+255
+110
+124
+242
+107
+114
+228
+97
+102
+228
+92
+96
+239
+99
+102
+253
+110
+112
+255
+119
+120
+253
+117
+119
+255
+121
+126
+235
+89
+100
+237
+99
+112
+215
+99
+110
+242
+168
+169
+178
+162
+147
+118
+134
+107
+94
+114
+79
+78
+95
+59
+83
+90
+59
+117
+115
+92
+169
+157
+141
+214
+196
+184
+246
+225
+220
+255
+245
+241
+255
+248
+248
+255
+248
+249
+253
+249
+250
+251
+251
+251
+250
+254
+253
+251
+255
+254
+250
+254
+255
+246
+255
+250
+237
+255
+242
+227
+255
+232
+227
+251
+229
+235
+254
+234
+244
+255
+240
+249
+255
+241
+252
+255
+241
+255
+255
+240
+255
+253
+239
+255
+253
+237
+255
+251
+233
+254
+247
+229
+249
+244
+224
+248
+243
+221
+250
+245
+223
+250
+247
+228
+249
+249
+239
+251
+252
+246
+254
+253
+249
+92
+80
+66
+91
+79
+65
+91
+79
+65
+89
+77
+63
+88
+76
+62
+87
+75
+61
+86
+74
+60
+86
+74
+60
+83
+71
+57
+82
+70
+56
+81
+69
+55
+79
+67
+53
+79
+67
+53
+79
+67
+53
+79
+67
+53
+77
+67
+55
+74
+67
+57
+74
+70
+59
+77
+71
+57
+80
+73
+55
+83
+75
+54
+86
+75
+53
+86
+75
+55
+84
+75
+58
+87
+77
+67
+86
+77
+78
+90
+87
+98
+107
+105
+129
+121
+123
+161
+133
+137
+185
+139
+145
+203
+146
+150
+214
+153
+152
+222
+155
+151
+227
+155
+152
+233
+155
+156
+238
+157
+159
+244
+158
+163
+247
+160
+167
+248
+160
+169
+244
+160
+170
+239
+157
+168
+232
+155
+165
+227
+156
+162
+224
+156
+160
+224
+157
+158
+225
+156
+154
+227
+155
+153
+226
+153
+154
+221
+158
+152
+214
+168
+147
+204
+178
+140
+189
+191
+131
+169
+198
+115
+145
+197
+91
+111
+194
+70
+81
+209
+68
+76
+218
+65
+68
+223
+63
+65
+225
+62
+63
+225
+62
+65
+225
+62
+67
+223
+62
+68
+223
+62
+70
+224
+60
+67
+215
+56
+61
+213
+63
+65
+207
+65
+64
+202
+67
+63
+195
+60
+56
+196
+57
+54
+233
+87
+87
+224
+66
+67
+228
+62
+66
+232
+59
+63
+227
+57
+60
+220
+54
+56
+214
+54
+54
+209
+57
+54
+204
+59
+54
+213
+72
+65
+196
+59
+49
+190
+53
+43
+197
+65
+53
+205
+75
+62
+198
+72
+58
+187
+61
+47
+183
+56
+41
+186
+54
+41
+191
+55
+41
+199
+55
+44
+207
+54
+46
+215
+53
+48
+222
+55
+49
+230
+57
+53
+233
+61
+57
+217
+50
+42
+218
+51
+42
+221
+53
+42
+223
+52
+42
+223
+52
+42
+222
+54
+41
+220
+57
+42
+217
+62
+44
+198
+51
+33
+192
+51
+31
+187
+52
+33
+186
+53
+34
+191
+55
+41
+191
+55
+41
+191
+50
+40
+193
+44
+37
+227
+64
+59
+229
+62
+56
+222
+61
+51
+213
+60
+46
+204
+57
+41
+200
+55
+36
+200
+55
+34
+204
+55
+35
+210
+55
+37
+213
+51
+36
+215
+47
+38
+217
+46
+39
+219
+46
+42
+220
+46
+45
+219
+47
+47
+220
+46
+47
+219
+44
+41
+223
+48
+43
+224
+53
+45
+220
+53
+44
+213
+51
+38
+208
+52
+37
+208
+57
+38
+209
+62
+42
+212
+65
+47
+194
+49
+32
+231
+83
+69
+210
+59
+48
+218
+65
+59
+222
+67
+63
+232
+74
+73
+240
+84
+85
+237
+85
+84
+231
+83
+81
+227
+79
+77
+221
+74
+67
+214
+67
+59
+207
+60
+50
+202
+56
+43
+197
+54
+38
+196
+55
+38
+192
+55
+37
+188
+55
+38
+185
+58
+39
+185
+60
+42
+183
+62
+45
+181
+61
+44
+178
+61
+44
+176
+58
+44
+177
+59
+47
+180
+60
+46
+181
+61
+47
+183
+61
+46
+185
+63
+48
+190
+67
+52
+195
+69
+55
+220
+92
+81
+234
+103
+93
+228
+97
+89
+240
+108
+103
+246
+112
+109
+231
+97
+96
+236
+102
+103
+245
+106
+113
+228
+80
+94
+240
+94
+107
+240
+106
+113
+235
+104
+109
+235
+99
+103
+242
+102
+105
+254
+111
+113
+255
+117
+119
+253
+114
+117
+252
+111
+117
+231
+81
+93
+232
+90
+104
+217
+97
+109
+237
+158
+161
+170
+152
+138
+108
+122
+96
+89
+109
+72
+79
+100
+61
+87
+96
+65
+119
+119
+93
+173
+165
+146
+225
+209
+194
+255
+238
+230
+255
+248
+241
+255
+251
+247
+255
+252
+248
+252
+253
+248
+250
+255
+251
+251
+255
+253
+251
+255
+253
+249
+255
+251
+244
+255
+246
+233
+255
+237
+222
+252
+226
+220
+246
+221
+225
+247
+224
+233
+251
+229
+239
+251
+231
+245
+252
+234
+252
+255
+236
+253
+250
+233
+255
+250
+234
+255
+248
+230
+249
+242
+224
+241
+234
+216
+239
+232
+213
+243
+236
+217
+247
+242
+223
+251
+248
+239
+252
+252
+244
+255
+254
+249
+92
+80
+66
+92
+80
+66
+91
+79
+65
+90
+78
+64
+89
+77
+63
+89
+77
+63
+88
+76
+62
+88
+76
+62
+85
+73
+59
+84
+72
+58
+83
+71
+57
+82
+70
+56
+82
+70
+56
+82
+70
+56
+82
+70
+56
+80
+70
+58
+76
+69
+59
+75
+71
+60
+79
+73
+59
+82
+75
+57
+84
+76
+55
+87
+76
+54
+87
+76
+56
+87
+75
+59
+86
+76
+66
+85
+77
+75
+92
+86
+96
+106
+104
+126
+121
+121
+155
+130
+133
+178
+138
+141
+194
+143
+148
+206
+148
+148
+210
+149
+148
+214
+149
+149
+219
+150
+152
+227
+152
+155
+232
+152
+158
+236
+155
+161
+237
+155
+163
+235
+156
+165
+232
+152
+162
+223
+150
+159
+218
+149
+155
+213
+147
+153
+213
+147
+151
+214
+146
+147
+214
+145
+144
+210
+136
+131
+189
+148
+130
+182
+168
+124
+175
+184
+115
+162
+199
+102
+143
+207
+88
+120
+210
+72
+97
+208
+62
+75
+217
+68
+74
+218
+68
+67
+218
+69
+65
+220
+68
+65
+222
+66
+67
+225
+64
+69
+229
+62
+70
+229
+62
+70
+227
+63
+70
+214
+58
+62
+209
+63
+64
+209
+69
+68
+198
+65
+60
+186
+54
+49
+197
+62
+58
+234
+90
+89
+221
+65
+66
+227
+64
+67
+230
+61
+64
+227
+58
+61
+219
+56
+57
+211
+57
+55
+208
+60
+56
+206
+65
+56
+207
+69
+59
+194
+58
+46
+187
+50
+40
+192
+60
+47
+199
+69
+55
+196
+69
+54
+189
+62
+47
+184
+57
+40
+189
+56
+41
+194
+57
+41
+203
+56
+46
+210
+58
+47
+217
+56
+48
+224
+57
+49
+232
+59
+55
+235
+62
+56
+217
+48
+43
+218
+49
+42
+222
+51
+44
+224
+51
+44
+225
+52
+45
+225
+54
+46
+220
+56
+46
+217
+59
+47
+202
+54
+40
+199
+58
+41
+195
+59
+43
+192
+59
+44
+192
+58
+46
+195
+58
+48
+198
+59
+54
+208
+56
+53
+236
+67
+64
+237
+64
+60
+228
+64
+55
+217
+61
+49
+207
+57
+42
+199
+57
+37
+200
+58
+38
+201
+59
+37
+207
+60
+40
+208
+55
+39
+207
+49
+37
+209
+49
+37
+212
+49
+40
+214
+51
+44
+212
+49
+44
+209
+47
+42
+211
+50
+42
+211
+53
+44
+211
+55
+43
+208
+55
+41
+205
+53
+39
+202
+55
+37
+204
+59
+40
+204
+62
+42
+204
+59
+40
+207
+60
+44
+244
+94
+80
+224
+70
+60
+210
+51
+47
+210
+46
+44
+230
+64
+64
+251
+87
+88
+255
+117
+115
+255
+114
+111
+255
+106
+103
+246
+94
+89
+231
+80
+71
+213
+65
+55
+199
+53
+40
+189
+46
+32
+196
+56
+39
+192
+56
+40
+187
+56
+38
+184
+59
+41
+183
+60
+44
+181
+61
+45
+178
+61
+44
+176
+60
+45
+175
+59
+46
+173
+60
+46
+176
+60
+47
+176
+60
+45
+177
+59
+45
+182
+62
+46
+188
+66
+51
+192
+70
+55
+203
+77
+65
+223
+96
+87
+226
+97
+91
+244
+112
+108
+248
+116
+114
+230
+96
+97
+228
+93
+97
+232
+93
+100
+218
+70
+84
+234
+88
+101
+239
+105
+114
+236
+107
+111
+240
+104
+108
+249
+109
+112
+255
+113
+118
+255
+115
+118
+254
+111
+115
+248
+103
+110
+229
+74
+88
+229
+82
+98
+218
+93
+107
+230
+148
+150
+168
+145
+131
+106
+116
+89
+85
+106
+67
+83
+104
+63
+92
+103
+69
+121
+124
+95
+176
+170
+148
+231
+220
+202
+255
+245
+232
+255
+249
+240
+255
+249
+239
+252
+252
+242
+251
+254
+245
+250
+255
+249
+249
+255
+250
+246
+255
+248
+242
+252
+243
+234
+251
+235
+219
+247
+222
+208
+241
+210
+205
+234
+204
+209
+235
+206
+217
+237
+210
+223
+239
+213
+233
+243
+219
+242
+247
+225
+244
+246
+225
+249
+246
+227
+251
+246
+227
+244
+237
+219
+234
+227
+209
+231
+222
+205
+235
+226
+209
+240
+233
+217
+251
+244
+234
+251
+246
+240
+254
+249
+243
+92
+80
+66
+92
+80
+66
+91
+79
+65
+91
+79
+65
+90
+78
+64
+89
+77
+63
+89
+77
+63
+89
+77
+63
+87
+75
+61
+86
+74
+60
+85
+73
+59
+85
+73
+59
+84
+72
+58
+85
+73
+59
+85
+73
+59
+83
+73
+61
+79
+71
+60
+79
+73
+61
+81
+73
+60
+83
+76
+58
+85
+77
+56
+88
+77
+55
+89
+76
+57
+88
+76
+60
+85
+75
+65
+85
+75
+73
+92
+85
+93
+104
+101
+120
+117
+116
+147
+124
+126
+165
+133
+135
+183
+140
+143
+194
+141
+144
+195
+142
+145
+200
+142
+146
+207
+144
+148
+212
+146
+149
+220
+147
+151
+224
+148
+152
+223
+147
+154
+222
+149
+157
+220
+146
+155
+214
+142
+148
+206
+137
+144
+199
+133
+139
+197
+129
+135
+195
+126
+130
+193
+129
+125
+184
+128
+115
+159
+145
+110
+150
+170
+102
+143
+193
+92
+134
+214
+78
+118
+225
+65
+101
+229
+59
+85
+230
+59
+75
+226
+67
+71
+220
+71
+67
+216
+73
+65
+216
+73
+65
+220
+71
+67
+227
+66
+71
+236
+62
+72
+237
+61
+72
+230
+66
+73
+215
+62
+64
+208
+64
+63
+208
+73
+69
+191
+62
+56
+179
+50
+44
+200
+67
+60
+224
+85
+80
+220
+68
+67
+225
+65
+67
+227
+63
+64
+225
+62
+63
+218
+63
+61
+212
+64
+60
+209
+68
+59
+207
+70
+60
+199
+61
+50
+192
+56
+42
+189
+53
+41
+189
+57
+42
+191
+61
+45
+191
+61
+45
+189
+59
+43
+189
+60
+41
+194
+58
+42
+199
+59
+42
+207
+59
+47
+213
+59
+47
+219
+56
+47
+224
+56
+47
+231
+56
+51
+235
+57
+53
+231
+56
+53
+230
+52
+50
+229
+49
+48
+232
+50
+49
+233
+51
+50
+231
+52
+48
+222
+49
+43
+214
+47
+39
+205
+48
+39
+205
+54
+45
+201
+57
+48
+197
+54
+46
+194
+51
+45
+196
+51
+48
+206
+57
+59
+222
+62
+64
+235
+56
+59
+237
+55
+54
+228
+55
+49
+216
+53
+44
+204
+52
+38
+198
+53
+34
+196
+55
+35
+197
+58
+37
+203
+61
+41
+203
+56
+38
+204
+52
+38
+206
+53
+39
+212
+56
+44
+212
+58
+48
+211
+57
+47
+208
+56
+45
+208
+62
+49
+202
+59
+45
+197
+56
+39
+196
+55
+37
+198
+57
+39
+199
+60
+41
+199
+60
+41
+199
+58
+40
+205
+62
+45
+205
+58
+42
+216
+62
+50
+225
+67
+58
+212
+47
+45
+228
+58
+58
+224
+50
+52
+223
+53
+54
+215
+53
+51
+214
+59
+54
+222
+67
+62
+229
+75
+67
+234
+81
+73
+234
+83
+72
+232
+84
+72
+228
+85
+71
+203
+63
+48
+196
+63
+46
+190
+60
+44
+184
+61
+45
+183
+62
+45
+180
+63
+46
+176
+63
+47
+174
+62
+48
+172
+60
+46
+172
+60
+46
+172
+60
+46
+172
+61
+44
+173
+60
+44
+177
+61
+46
+183
+65
+51
+186
+68
+54
+198
+76
+65
+222
+98
+88
+226
+99
+93
+240
+110
+108
+244
+114
+114
+229
+96
+99
+229
+96
+101
+232
+95
+103
+251
+105
+118
+254
+109
+122
+241
+110
+118
+229
+100
+104
+234
+98
+102
+252
+109
+113
+255
+117
+123
+255
+118
+124
+254
+107
+115
+245
+95
+106
+232
+71
+87
+228
+75
+93
+221
+90
+104
+226
+137
+141
+172
+142
+131
+115
+121
+93
+93
+114
+73
+94
+117
+73
+104
+119
+80
+129
+136
+102
+179
+178
+150
+232
+226
+204
+255
+250
+233
+255
+253
+237
+254
+252
+237
+251
+255
+240
+249
+255
+242
+247
+255
+243
+244
+255
+241
+237
+251
+234
+227
+241
+224
+218
+237
+215
+201
+232
+200
+191
+227
+189
+187
+221
+186
+192
+222
+188
+200
+224
+192
+207
+226
+196
+217
+230
+204
+227
+235
+211
+235
+239
+216
+243
+242
+222
+247
+242
+223
+242
+235
+217
+234
+225
+210
+231
+219
+205
+233
+221
+207
+238
+226
+214
+241
+231
+222
+240
+231
+224
+242
+233
+226
+91
+79
+65
+91
+79
+65
+91
+79
+65
+90
+78
+64
+90
+78
+64
+89
+77
+63
+89
+77
+63
+89
+77
+63
+88
+76
+62
+88
+76
+62
+87
+75
+61
+86
+74
+60
+86
+74
+60
+87
+75
+61
+87
+75
+61
+88
+76
+62
+81
+73
+62
+81
+73
+62
+83
+75
+62
+85
+76
+59
+88
+77
+57
+88
+77
+55
+89
+76
+57
+88
+77
+59
+87
+75
+63
+85
+76
+71
+89
+83
+87
+101
+94
+110
+110
+106
+131
+117
+116
+150
+126
+125
+165
+131
+134
+177
+133
+138
+180
+132
+139
+185
+135
+141
+193
+137
+142
+200
+139
+143
+207
+140
+143
+212
+141
+144
+213
+141
+144
+211
+144
+148
+211
+139
+144
+202
+131
+136
+192
+126
+129
+184
+120
+123
+178
+114
+116
+173
+108
+110
+171
+111
+104
+156
+131
+105
+140
+148
+98
+123
+175
+88
+120
+203
+79
+113
+227
+65
+102
+239
+56
+87
+243
+53
+78
+244
+58
+72
+235
+66
+69
+225
+72
+66
+217
+76
+66
+215
+77
+66
+222
+73
+69
+229
+69
+71
+240
+63
+73
+240
+62
+74
+228
+67
+72
+215
+67
+67
+204
+65
+62
+206
+73
+68
+186
+59
+52
+176
+52
+44
+201
+73
+64
+213
+76
+70
+216
+66
+65
+218
+63
+61
+219
+59
+59
+218
+60
+59
+216
+64
+61
+212
+69
+63
+205
+71
+60
+203
+71
+58
+192
+56
+42
+193
+56
+40
+192
+56
+42
+190
+57
+40
+188
+57
+39
+187
+56
+38
+189
+58
+40
+192
+59
+40
+196
+59
+41
+202
+61
+44
+210
+60
+46
+215
+59
+46
+220
+56
+46
+225
+54
+46
+228
+54
+47
+232
+53
+48
+234
+50
+50
+234
+46
+47
+234
+43
+48
+240
+47
+50
+246
+51
+55
+247
+54
+55
+240
+52
+53
+230
+50
+49
+219
+46
+42
+216
+51
+47
+215
+53
+50
+210
+50
+50
+209
+46
+49
+211
+46
+52
+220
+53
+61
+235
+58
+68
+237
+48
+54
+238
+48
+50
+230
+51
+47
+220
+51
+44
+209
+53
+41
+202
+55
+39
+200
+57
+40
+201
+60
+40
+198
+56
+36
+201
+54
+36
+206
+54
+40
+211
+58
+44
+218
+62
+50
+221
+65
+53
+221
+65
+53
+216
+65
+54
+211
+71
+56
+201
+65
+49
+194
+59
+40
+192
+57
+38
+195
+60
+41
+198
+61
+42
+197
+60
+42
+197
+56
+38
+204
+58
+43
+205
+55
+41
+205
+48
+39
+230
+67
+60
+219
+50
+47
+239
+63
+65
+227
+47
+50
+218
+42
+44
+213
+49
+47
+210
+53
+46
+213
+56
+49
+214
+57
+48
+210
+56
+46
+204
+53
+42
+198
+50
+38
+192
+49
+35
+206
+69
+53
+198
+65
+50
+188
+61
+46
+181
+58
+42
+177
+57
+41
+175
+57
+43
+171
+58
+44
+170
+58
+44
+171
+59
+47
+171
+61
+48
+172
+62
+47
+172
+60
+46
+171
+60
+43
+173
+60
+44
+178
+62
+47
+181
+65
+50
+201
+83
+71
+224
+103
+94
+224
+99
+95
+234
+106
+105
+238
+110
+111
+230
+99
+104
+240
+106
+113
+246
+110
+120
+255
+110
+123
+255
+114
+126
+241
+112
+117
+231
+102
+107
+240
+103
+110
+255
+116
+122
+255
+117
+126
+255
+110
+117
+253
+103
+112
+244
+90
+102
+237
+72
+89
+229
+72
+91
+222
+87
+102
+220
+128
+131
+180
+146
+134
+133
+136
+107
+113
+134
+93
+111
+137
+90
+121
+138
+96
+141
+151
+114
+182
+183
+152
+223
+222
+194
+249
+244
+222
+252
+250
+229
+255
+255
+239
+250
+255
+238
+244
+255
+238
+238
+255
+234
+230
+249
+227
+220
+239
+217
+208
+227
+205
+197
+222
+193
+178
+213
+173
+172
+211
+167
+172
+209
+168
+178
+210
+171
+185
+213
+175
+190
+214
+178
+201
+218
+186
+210
+223
+193
+224
+230
+204
+232
+234
+212
+240
+237
+218
+241
+234
+216
+236
+227
+212
+233
+221
+209
+232
+218
+207
+234
+220
+211
+232
+219
+211
+230
+217
+211
+229
+216
+210
+91
+78
+62
+91
+78
+62
+91
+78
+62
+91
+78
+62
+90
+77
+61
+90
+77
+61
+90
+77
+61
+90
+77
+61
+89
+76
+60
+89
+76
+60
+88
+75
+59
+88
+75
+59
+88
+75
+59
+89
+76
+60
+89
+76
+60
+89
+77
+63
+83
+73
+63
+84
+74
+62
+85
+76
+61
+88
+76
+60
+89
+78
+58
+90
+77
+58
+90
+77
+58
+89
+78
+60
+89
+77
+63
+85
+76
+69
+88
+79
+82
+95
+87
+98
+100
+95
+115
+106
+102
+129
+115
+111
+144
+121
+121
+157
+122
+128
+164
+122
+130
+169
+127
+131
+178
+130
+133
+188
+133
+134
+198
+135
+136
+203
+136
+137
+204
+136
+137
+202
+136
+136
+200
+131
+131
+191
+125
+124
+181
+121
+118
+173
+115
+112
+167
+110
+107
+164
+105
+101
+160
+111
+95
+142
+132
+94
+117
+151
+85
+97
+179
+78
+96
+210
+74
+98
+236
+64
+90
+246
+54
+79
+251
+52
+71
+252
+58
+69
+240
+64
+64
+231
+70
+62
+222
+74
+64
+219
+75
+66
+224
+72
+69
+231
+68
+71
+240
+63
+73
+239
+63
+74
+221
+65
+68
+212
+70
+68
+200
+65
+61
+201
+72
+66
+180
+58
+47
+177
+55
+44
+206
+79
+70
+201
+66
+60
+206
+61
+56
+208
+54
+52
+207
+49
+48
+208
+53
+49
+211
+62
+56
+207
+69
+59
+200
+70
+57
+195
+68
+53
+190
+57
+40
+195
+58
+40
+194
+58
+42
+191
+58
+39
+189
+56
+37
+190
+57
+38
+191
+58
+39
+193
+58
+38
+196
+57
+38
+203
+58
+41
+211
+58
+44
+217
+57
+43
+221
+55
+43
+225
+53
+43
+228
+51
+43
+234
+51
+45
+235
+42
+43
+241
+42
+45
+248
+45
+51
+253
+46
+52
+255
+49
+55
+255
+50
+55
+255
+51
+56
+253
+53
+56
+250
+55
+59
+246
+55
+60
+243
+57
+62
+243
+56
+65
+246
+56
+68
+247
+55
+70
+252
+53
+72
+254
+53
+69
+246
+42
+53
+244
+45
+50
+237
+49
+50
+227
+52
+47
+217
+54
+45
+208
+56
+42
+206
+59
+43
+206
+61
+44
+203
+53
+38
+209
+56
+42
+217
+59
+47
+223
+61
+50
+226
+62
+52
+228
+61
+52
+229
+62
+53
+223
+65
+54
+217
+74
+60
+207
+71
+55
+201
+65
+49
+196
+60
+44
+194
+57
+41
+194
+57
+39
+198
+56
+42
+200
+57
+41
+201
+50
+39
+211
+57
+47
+225
+64
+56
+235
+68
+62
+222
+48
+47
+224
+46
+46
+235
+52
+54
+232
+54
+54
+216
+51
+45
+213
+55
+46
+215
+57
+48
+215
+58
+49
+213
+59
+49
+210
+59
+48
+205
+58
+48
+201
+59
+47
+214
+76
+63
+204
+70
+58
+191
+64
+49
+180
+57
+42
+176
+54
+41
+172
+54
+40
+171
+55
+42
+169
+56
+42
+172
+59
+45
+173
+61
+47
+174
+62
+48
+173
+61
+47
+171
+60
+43
+171
+60
+43
+173
+60
+46
+177
+61
+48
+192
+75
+65
+218
+100
+90
+222
+99
+94
+232
+107
+105
+240
+111
+115
+234
+105
+110
+245
+114
+122
+253
+117
+127
+241
+101
+112
+248
+111
+121
+245
+116
+121
+237
+111
+115
+248
+111
+118
+255
+120
+127
+255
+116
+125
+255
+101
+111
+252
+98
+110
+242
+84
+98
+241
+72
+91
+231
+68
+89
+222
+81
+97
+217
+118
+123
+189
+149
+137
+152
+153
+122
+129
+150
+107
+123
+151
+102
+130
+149
+104
+145
+157
+117
+172
+178
+142
+203
+204
+173
+224
+224
+196
+233
+236
+209
+236
+244
+220
+227
+241
+215
+215
+235
+207
+205
+228
+199
+196
+221
+191
+187
+212
+182
+180
+203
+174
+172
+199
+164
+156
+193
+149
+152
+194
+144
+156
+195
+148
+163
+201
+154
+170
+203
+158
+175
+203
+162
+184
+206
+168
+194
+211
+177
+206
+217
+187
+216
+222
+196
+228
+227
+206
+235
+229
+213
+236
+226
+214
+233
+219
+210
+229
+212
+205
+226
+209
+202
+223
+205
+201
+218
+203
+198
+213
+198
+193
+91
+78
+62
+90
+77
+61
+90
+77
+61
+90
+77
+61
+90
+77
+61
+90
+77
+61
+89
+76
+60
+89
+76
+60
+90
+77
+61
+89
+76
+60
+89
+76
+60
+88
+75
+59
+88
+75
+59
+89
+76
+60
+90
+77
+61
+90
+76
+63
+86
+74
+62
+86
+74
+62
+88
+76
+62
+89
+78
+60
+90
+77
+60
+90
+77
+58
+90
+77
+58
+90
+77
+60
+91
+79
+65
+87
+77
+68
+87
+77
+76
+92
+82
+90
+94
+88
+102
+98
+93
+113
+106
+102
+127
+113
+113
+141
+116
+119
+150
+116
+122
+156
+120
+125
+167
+125
+128
+181
+129
+129
+191
+132
+131
+197
+133
+132
+200
+135
+132
+199
+130
+125
+191
+127
+121
+183
+125
+116
+173
+122
+111
+167
+122
+109
+165
+120
+105
+162
+116
+101
+160
+124
+95
+141
+133
+79
+93
+152
+72
+75
+178
+69
+75
+211
+71
+82
+237
+66
+82
+246
+58
+73
+252
+54
+67
+253
+58
+64
+244
+62
+61
+235
+66
+59
+228
+69
+63
+225
+70
+65
+227
+69
+66
+230
+67
+70
+237
+63
+72
+234
+64
+73
+214
+64
+65
+209
+71
+68
+197
+65
+60
+195
+71
+63
+178
+57
+46
+179
+58
+47
+209
+85
+75
+195
+62
+53
+201
+56
+51
+199
+47
+44
+197
+42
+38
+200
+47
+42
+205
+58
+51
+204
+67
+57
+195
+67
+54
+188
+62
+47
+192
+59
+42
+196
+59
+41
+195
+60
+41
+193
+58
+39
+194
+59
+40
+195
+60
+41
+194
+59
+39
+195
+56
+37
+196
+53
+36
+202
+55
+37
+212
+56
+41
+217
+55
+42
+221
+53
+42
+225
+51
+42
+229
+51
+41
+234
+50
+42
+245
+51
+51
+254
+54
+56
+255
+56
+60
+255
+52
+58
+255
+45
+50
+255
+40
+45
+255
+40
+45
+254
+43
+49
+254
+45
+51
+246
+41
+48
+242
+38
+49
+247
+41
+54
+255
+44
+63
+255
+42
+65
+252
+32
+57
+244
+25
+47
+246
+34
+48
+243
+40
+46
+237
+44
+49
+230
+48
+47
+218
+49
+44
+212
+51
+43
+209
+53
+41
+208
+54
+42
+212
+54
+43
+221
+57
+48
+230
+61
+54
+235
+62
+55
+235
+58
+52
+232
+55
+49
+232
+53
+48
+226
+57
+50
+223
+72
+61
+215
+75
+60
+211
+69
+55
+203
+61
+47
+196
+54
+40
+194
+51
+37
+200
+54
+41
+207
+56
+45
+206
+52
+42
+212
+54
+45
+230
+67
+60
+223
+56
+50
+224
+50
+49
+210
+32
+32
+236
+56
+57
+229
+54
+51
+213
+49
+40
+210
+52
+41
+210
+52
+41
+207
+53
+41
+206
+54
+43
+202
+54
+42
+200
+53
+43
+197
+55
+43
+227
+89
+78
+216
+82
+70
+202
+72
+59
+190
+64
+50
+183
+59
+47
+181
+59
+46
+181
+60
+49
+181
+60
+49
+175
+57
+45
+177
+59
+47
+177
+61
+48
+177
+61
+46
+175
+59
+44
+173
+57
+42
+173
+57
+44
+174
+58
+45
+177
+60
+50
+208
+89
+81
+220
+98
+93
+236
+112
+112
+244
+118
+121
+238
+109
+114
+245
+113
+124
+248
+114
+125
+255
+121
+131
+255
+127
+137
+250
+124
+128
+235
+109
+113
+241
+104
+112
+255
+114
+124
+255
+115
+127
+255
+105
+116
+250
+92
+106
+243
+80
+97
+245
+71
+94
+232
+64
+87
+220
+78
+94
+215
+112
+116
+196
+152
+139
+164
+163
+132
+134
+156
+110
+126
+154
+103
+129
+151
+104
+141
+156
+113
+161
+169
+130
+180
+186
+150
+200
+205
+173
+213
+220
+189
+202
+215
+185
+191
+210
+178
+176
+202
+167
+166
+193
+158
+157
+187
+151
+154
+182
+144
+150
+178
+140
+145
+176
+134
+140
+180
+130
+138
+181
+127
+143
+186
+133
+152
+192
+140
+158
+195
+144
+162
+196
+146
+170
+197
+154
+179
+201
+162
+190
+206
+170
+201
+210
+181
+216
+218
+196
+227
+224
+205
+232
+222
+210
+230
+216
+207
+223
+205
+201
+218
+199
+195
+211
+193
+189
+206
+188
+184
+200
+182
+180
+90
+77
+61
+90
+77
+61
+90
+77
+61
+90
+77
+61
+90
+77
+61
+90
+77
+61
+90
+77
+61
+90
+77
+61
+88
+75
+59
+88
+75
+59
+88
+75
+59
+89
+76
+60
+89
+76
+60
+90
+77
+61
+90
+77
+61
+90
+77
+61
+90
+76
+63
+90
+76
+63
+90
+77
+61
+91
+78
+61
+93
+77
+61
+94
+79
+60
+92
+79
+60
+92
+79
+62
+89
+77
+61
+87
+77
+67
+87
+76
+72
+88
+78
+79
+90
+80
+88
+93
+85
+98
+96
+89
+105
+96
+93
+114
+103
+103
+129
+106
+109
+142
+112
+114
+155
+114
+116
+167
+120
+119
+179
+129
+126
+193
+137
+131
+201
+138
+131
+199
+137
+126
+192
+140
+126
+188
+138
+120
+178
+135
+112
+168
+139
+112
+167
+145
+114
+171
+139
+106
+163
+137
+90
+132
+143
+71
+82
+161
+66
+60
+179
+65
+64
+202
+68
+67
+220
+64
+67
+231
+58
+62
+243
+60
+62
+254
+68
+69
+246
+62
+60
+241
+62
+58
+236
+62
+61
+233
+65
+64
+233
+67
+67
+233
+68
+72
+233
+66
+73
+226
+67
+72
+207
+63
+62
+197
+64
+57
+190
+63
+54
+183
+62
+51
+176
+60
+47
+178
+60
+48
+192
+68
+56
+210
+77
+68
+199
+54
+49
+212
+59
+54
+205
+50
+46
+204
+51
+46
+214
+67
+59
+199
+63
+51
+181
+54
+39
+187
+62
+44
+186
+55
+37
+193
+58
+39
+195
+60
+41
+194
+59
+40
+192
+57
+37
+194
+57
+38
+197
+58
+39
+199
+58
+40
+203
+58
+39
+208
+57
+40
+214
+54
+40
+216
+50
+36
+218
+46
+34
+224
+47
+37
+236
+55
+46
+245
+61
+53
+246
+57
+51
+247
+54
+49
+248
+49
+46
+249
+43
+43
+250
+40
+41
+252
+38
+40
+252
+38
+40
+252
+38
+40
+251
+38
+42
+247
+33
+41
+248
+34
+46
+255
+39
+55
+255
+41
+62
+255
+33
+59
+255
+24
+54
+255
+23
+49
+254
+37
+54
+238
+34
+43
+229
+34
+42
+227
+43
+45
+221
+45
+45
+211
+42
+39
+209
+44
+40
+218
+50
+47
+226
+54
+50
+232
+54
+52
+238
+54
+54
+242
+54
+53
+242
+49
+50
+239
+46
+47
+238
+44
+44
+229
+47
+44
+220
+57
+50
+209
+58
+49
+210
+57
+49
+236
+83
+75
+187
+34
+26
+196
+43
+35
+223
+70
+62
+200
+46
+38
+205
+46
+40
+222
+60
+55
+232
+69
+64
+226
+58
+55
+216
+47
+42
+218
+46
+42
+226
+53
+49
+229
+60
+55
+223
+62
+52
+213
+60
+46
+207
+53
+41
+203
+51
+38
+204
+53
+42
+205
+59
+46
+203
+59
+48
+197
+56
+46
+236
+98
+88
+224
+90
+79
+200
+67
+58
+185
+54
+44
+186
+58
+47
+184
+56
+45
+177
+51
+39
+180
+54
+42
+176
+48
+37
+176
+50
+38
+174
+50
+38
+175
+52
+37
+176
+54
+39
+178
+58
+42
+180
+60
+46
+179
+61
+49
+176
+58
+48
+186
+67
+59
+214
+92
+87
+236
+112
+112
+241
+115
+118
+246
+120
+124
+251
+121
+131
+245
+113
+124
+255
+122
+132
+253
+119
+128
+242
+117
+123
+244
+118
+122
+253
+116
+124
+255
+114
+124
+255
+107
+120
+255
+100
+115
+255
+94
+110
+241
+74
+92
+245
+69
+92
+239
+70
+91
+217
+70
+86
+208
+103
+107
+190
+144
+128
+158
+155
+122
+134
+156
+109
+125
+153
+102
+126
+148
+99
+135
+151
+106
+148
+159
+119
+158
+166
+129
+160
+168
+131
+156
+168
+132
+146
+163
+127
+138
+163
+124
+128
+159
+118
+122
+154
+113
+121
+154
+111
+124
+157
+114
+129
+160
+118
+131
+164
+117
+132
+172
+119
+134
+177
+121
+140
+183
+127
+147
+188
+132
+149
+190
+134
+152
+189
+135
+157
+189
+140
+162
+189
+144
+167
+188
+147
+175
+189
+154
+189
+195
+167
+206
+205
+185
+220
+212
+199
+224
+211
+202
+218
+200
+196
+211
+192
+188
+203
+185
+183
+192
+177
+174
+184
+168
+168
+90
+77
+61
+90
+77
+61
+90
+77
+61
+90
+77
+61
+90
+77
+61
+90
+77
+61
+90
+77
+61
+90
+77
+61
+88
+75
+59
+88
+75
+59
+88
+75
+59
+89
+76
+60
+89
+76
+60
+90
+77
+61
+90
+77
+61
+90
+77
+61
+90
+76
+63
+90
+77
+61
+92
+76
+61
+93
+77
+61
+93
+78
+59
+94
+79
+60
+92
+79
+60
+92
+79
+62
+93
+80
+64
+91
+79
+67
+91
+78
+70
+89
+78
+74
+90
+80
+81
+92
+83
+88
+95
+85
+94
+94
+88
+102
+97
+93
+116
+101
+100
+131
+107
+105
+145
+110
+108
+157
+117
+113
+172
+127
+122
+188
+135
+128
+196
+139
+128
+196
+143
+128
+193
+145
+125
+186
+143
+116
+171
+143
+108
+162
+154
+111
+164
+165
+115
+168
+158
+103
+158
+154
+86
+125
+156
+61
+69
+166
+55
+46
+175
+54
+46
+192
+61
+53
+208
+65
+59
+218
+63
+58
+231
+64
+58
+243
+65
+61
+245
+61
+61
+245
+59
+60
+244
+60
+62
+241
+62
+65
+236
+66
+69
+231
+66
+70
+225
+66
+70
+216
+66
+67
+199
+60
+55
+189
+61
+52
+182
+60
+49
+177
+59
+47
+171
+58
+44
+174
+58
+43
+189
+65
+53
+208
+74
+65
+218
+71
+64
+220
+65
+61
+212
+54
+51
+208
+53
+49
+213
+64
+57
+205
+67
+56
+187
+57
+43
+178
+53
+35
+189
+56
+39
+194
+59
+40
+196
+61
+42
+196
+61
+42
+196
+59
+40
+198
+59
+40
+199
+58
+40
+202
+57
+40
+207
+57
+40
+207
+54
+38
+212
+50
+37
+218
+50
+37
+227
+53
+42
+234
+56
+46
+239
+56
+48
+240
+57
+49
+231
+50
+39
+231
+49
+38
+235
+47
+38
+240
+45
+39
+246
+44
+40
+250
+45
+42
+254
+46
+44
+255
+46
+47
+251
+42
+45
+248
+37
+43
+250
+36
+46
+255
+39
+55
+255
+37
+59
+255
+29
+55
+255
+20
+51
+252
+19
+48
+244
+29
+47
+245
+45
+56
+244
+50
+59
+228
+41
+48
+218
+39
+43
+219
+45
+47
+221
+47
+49
+218
+42
+45
+241
+58
+62
+244
+55
+61
+247
+52
+58
+246
+50
+54
+246
+47
+52
+248
+48
+51
+249
+50
+53
+244
+56
+55
+219
+50
+45
+218
+59
+53
+215
+56
+50
+228
+69
+63
+228
+69
+63
+206
+47
+43
+209
+50
+46
+193
+34
+30
+212
+53
+49
+225
+63
+58
+232
+69
+64
+224
+61
+56
+216
+51
+45
+217
+50
+44
+221
+54
+48
+221
+58
+49
+212
+58
+46
+207
+57
+42
+201
+53
+39
+199
+53
+40
+200
+57
+43
+202
+60
+48
+202
+60
+50
+198
+57
+47
+237
+99
+89
+225
+88
+78
+201
+64
+56
+186
+52
+43
+194
+57
+49
+195
+58
+48
+191
+54
+44
+194
+57
+47
+191
+53
+43
+190
+52
+42
+189
+52
+42
+187
+53
+41
+184
+54
+41
+181
+53
+40
+180
+54
+40
+176
+54
+41
+180
+59
+48
+187
+66
+57
+211
+89
+84
+232
+108
+106
+239
+113
+116
+246
+120
+124
+254
+124
+132
+249
+117
+128
+255
+122
+132
+253
+119
+128
+244
+119
+125
+245
+118
+125
+254
+117
+125
+255
+111
+123
+255
+104
+118
+255
+97
+113
+255
+93
+110
+242
+75
+93
+246
+68
+92
+242
+70
+92
+221
+73
+89
+208
+102
+104
+183
+138
+119
+149
+146
+111
+127
+147
+98
+117
+146
+92
+120
+142
+93
+127
+144
+99
+138
+149
+107
+141
+152
+112
+139
+149
+112
+133
+148
+109
+112
+135
+93
+108
+137
+93
+104
+137
+92
+103
+141
+94
+107
+143
+95
+113
+149
+101
+121
+155
+105
+124
+158
+107
+132
+171
+116
+133
+177
+118
+139
+183
+124
+142
+186
+125
+146
+187
+127
+148
+187
+130
+151
+188
+134
+155
+187
+137
+155
+181
+134
+161
+179
+139
+172
+183
+151
+188
+190
+168
+205
+199
+183
+213
+200
+191
+212
+195
+188
+206
+188
+186
+197
+181
+181
+186
+172
+172
+177
+163
+163
+92
+76
+60
+92
+76
+60
+92
+76
+60
+92
+76
+60
+92
+76
+60
+92
+76
+60
+92
+76
+60
+92
+76
+60
+90
+74
+58
+90
+74
+58
+90
+74
+58
+91
+75
+59
+91
+75
+59
+92
+76
+60
+92
+76
+60
+92
+76
+60
+92
+76
+61
+92
+76
+61
+93
+75
+61
+93
+77
+61
+93
+78
+59
+94
+79
+60
+94
+79
+60
+92
+79
+60
+95
+82
+65
+93
+81
+65
+92
+80
+68
+91
+78
+70
+90
+79
+75
+91
+80
+78
+93
+81
+83
+92
+82
+90
+93
+84
+103
+98
+89
+118
+101
+95
+133
+105
+99
+145
+113
+108
+164
+125
+119
+181
+132
+126
+190
+137
+125
+189
+152
+132
+193
+155
+128
+183
+156
+118
+169
+160
+111
+158
+177
+115
+162
+189
+117
+165
+183
+104
+152
+177
+81
+118
+181
+61
+70
+186
+54
+49
+182
+54
+45
+189
+61
+50
+200
+68
+56
+210
+69
+59
+219
+66
+58
+228
+63
+57
+241
+61
+62
+247
+58
+62
+249
+58
+63
+247
+61
+66
+239
+64
+69
+229
+66
+69
+215
+65
+66
+205
+66
+63
+192
+59
+52
+184
+57
+48
+177
+57
+43
+173
+57
+42
+169
+56
+40
+173
+57
+42
+187
+63
+51
+207
+70
+60
+217
+68
+62
+215
+57
+54
+217
+55
+52
+218
+59
+55
+220
+67
+61
+221
+79
+69
+206
+72
+60
+181
+51
+35
+190
+57
+40
+193
+58
+39
+196
+59
+41
+198
+61
+43
+201
+61
+44
+200
+60
+43
+201
+58
+41
+204
+57
+41
+207
+55
+41
+207
+50
+35
+211
+47
+35
+223
+52
+42
+238
+61
+51
+244
+63
+54
+241
+57
+49
+233
+52
+43
+224
+54
+39
+221
+54
+38
+226
+50
+37
+230
+48
+37
+234
+46
+37
+238
+45
+38
+239
+44
+40
+242
+44
+41
+242
+44
+45
+239
+40
+43
+240
+39
+47
+247
+41
+54
+253
+37
+58
+252
+30
+55
+251
+22
+51
+248
+24
+51
+244
+37
+55
+241
+47
+58
+242
+52
+64
+239
+53
+64
+238
+57
+66
+238
+58
+67
+233
+53
+62
+229
+45
+55
+240
+50
+60
+243
+47
+59
+246
+46
+57
+246
+45
+55
+245
+46
+51
+245
+46
+49
+243
+47
+49
+237
+52
+50
+220
+48
+44
+226
+61
+57
+218
+54
+52
+223
+59
+57
+255
+109
+106
+229
+67
+65
+209
+47
+45
+206
+47
+44
+217
+58
+55
+223
+64
+60
+224
+65
+59
+219
+60
+54
+213
+55
+46
+214
+53
+45
+214
+53
+43
+210
+54
+42
+200
+54
+39
+195
+54
+37
+194
+54
+39
+196
+56
+41
+197
+59
+46
+198
+60
+49
+198
+60
+49
+197
+59
+49
+235
+96
+89
+225
+84
+77
+201
+60
+51
+191
+48
+40
+203
+59
+51
+209
+62
+54
+206
+59
+51
+210
+61
+54
+216
+61
+56
+215
+60
+55
+212
+61
+54
+207
+60
+50
+201
+59
+49
+195
+57
+46
+188
+54
+42
+182
+54
+41
+185
+59
+47
+188
+64
+54
+207
+84
+77
+227
+103
+101
+237
+111
+114
+248
+122
+126
+255
+129
+136
+253
+123
+131
+255
+122
+131
+252
+121
+129
+245
+122
+127
+246
+121
+127
+254
+117
+127
+255
+110
+124
+255
+99
+117
+255
+92
+111
+255
+89
+109
+242
+73
+94
+245
+65
+90
+242
+70
+92
+224
+76
+90
+203
+97
+97
+167
+122
+101
+130
+128
+90
+110
+130
+81
+104
+133
+79
+109
+131
+82
+116
+133
+88
+123
+136
+93
+125
+136
+94
+120
+132
+92
+113
+130
+88
+96
+122
+77
+95
+127
+80
+97
+133
+85
+101
+141
+89
+110
+149
+96
+117
+156
+103
+125
+160
+106
+128
+163
+109
+132
+171
+114
+135
+176
+116
+139
+180
+120
+142
+184
+121
+140
+184
+121
+143
+185
+122
+146
+186
+126
+148
+186
+129
+147
+177
+127
+149
+172
+128
+154
+170
+134
+168
+174
+146
+184
+181
+162
+196
+186
+174
+200
+185
+178
+198
+183
+180
+183
+171
+173
+169
+160
+165
+159
+150
+155
+91
+75
+59
+91
+75
+59
+91
+75
+59
+91
+75
+59
+91
+75
+59
+91
+75
+59
+91
+75
+59
+91
+75
+59
+90
+74
+58
+90
+74
+58
+90
+74
+58
+91
+75
+59
+91
+75
+59
+92
+76
+60
+92
+76
+60
+92
+76
+60
+93
+75
+61
+93
+75
+61
+93
+76
+60
+94
+77
+61
+94
+77
+59
+94
+79
+60
+94
+79
+60
+94
+79
+60
+94
+81
+64
+94
+81
+64
+93
+79
+66
+91
+79
+67
+92
+78
+69
+91
+78
+70
+92
+79
+73
+91
+79
+79
+94
+80
+95
+98
+84
+109
+100
+89
+123
+103
+94
+137
+111
+104
+156
+122
+117
+173
+132
+124
+183
+136
+123
+179
+155
+132
+186
+166
+133
+180
+175
+128
+170
+184
+122
+161
+200
+120
+159
+211
+116
+156
+204
+99
+140
+198
+77
+108
+216
+72
+82
+217
+67
+66
+209
+67
+63
+203
+70
+61
+201
+73
+60
+204
+72
+59
+211
+69
+59
+222
+65
+60
+238
+64
+65
+245
+60
+65
+251
+60
+68
+249
+62
+69
+240
+65
+72
+226
+66
+68
+209
+65
+64
+197
+64
+59
+191
+63
+54
+182
+60
+49
+175
+57
+43
+171
+58
+42
+170
+57
+41
+174
+56
+42
+188
+62
+48
+206
+68
+58
+213
+60
+55
+213
+51
+49
+224
+59
+57
+229
+65
+63
+225
+68
+63
+232
+83
+76
+223
+85
+74
+191
+58
+43
+193
+57
+41
+190
+55
+36
+192
+55
+37
+196
+59
+41
+201
+61
+44
+202
+61
+44
+203
+57
+42
+206
+56
+41
+205
+52
+38
+210
+50
+38
+217
+50
+41
+229
+57
+47
+241
+62
+55
+245
+62
+54
+240
+53
+46
+228
+47
+38
+222
+54
+41
+221
+55
+41
+224
+52
+42
+228
+50
+40
+231
+46
+41
+233
+46
+41
+236
+44
+41
+236
+44
+43
+232
+42
+44
+230
+39
+44
+234
+40
+49
+240
+42
+57
+245
+39
+60
+246
+34
+59
+250
+31
+61
+251
+37
+65
+253
+56
+74
+228
+40
+54
+229
+44
+58
+255
+77
+89
+255
+93
+105
+255
+78
+90
+242
+60
+73
+244
+58
+72
+232
+41
+56
+237
+42
+56
+241
+45
+57
+244
+48
+58
+241
+50
+55
+234
+48
+49
+225
+43
+42
+215
+40
+37
+216
+48
+45
+218
+55
+50
+212
+50
+47
+229
+67
+64
+255
+115
+112
+245
+86
+83
+221
+62
+59
+229
+71
+68
+219
+61
+58
+218
+60
+57
+213
+58
+53
+210
+56
+48
+209
+55
+45
+208
+54
+42
+205
+52
+38
+198
+51
+35
+190
+53
+35
+185
+54
+36
+187
+56
+38
+191
+59
+44
+192
+60
+47
+191
+57
+45
+192
+58
+47
+197
+60
+50
+229
+88
+81
+220
+77
+71
+202
+55
+48
+199
+48
+41
+215
+60
+55
+222
+65
+58
+218
+59
+53
+223
+60
+53
+231
+62
+57
+233
+61
+57
+230
+63
+57
+225
+64
+56
+217
+63
+53
+208
+60
+50
+200
+58
+46
+193
+57
+45
+187
+57
+44
+187
+61
+49
+203
+78
+72
+224
+99
+95
+236
+110
+111
+250
+124
+127
+255
+132
+136
+255
+125
+133
+252
+118
+127
+250
+119
+127
+245
+122
+127
+247
+122
+128
+255
+118
+128
+255
+109
+123
+255
+98
+116
+254
+91
+110
+250
+84
+104
+240
+71
+92
+241
+61
+86
+240
+68
+90
+225
+79
+92
+195
+91
+90
+146
+104
+82
+111
+109
+71
+95
+115
+66
+92
+121
+67
+100
+122
+73
+108
+125
+80
+116
+129
+86
+118
+131
+88
+114
+129
+88
+111
+129
+87
+109
+135
+90
+108
+142
+92
+111
+149
+98
+117
+157
+104
+123
+164
+108
+129
+168
+111
+132
+170
+113
+135
+170
+112
+134
+172
+113
+136
+176
+116
+139
+179
+117
+140
+182
+118
+138
+183
+118
+138
+183
+118
+139
+184
+119
+144
+184
+122
+145
+180
+124
+143
+171
+123
+144
+165
+124
+154
+165
+133
+170
+172
+150
+187
+180
+164
+197
+184
+175
+198
+184
+181
+177
+171
+175
+161
+158
+165
+151
+146
+153
+91
+75
+59
+91
+75
+59
+91
+75
+59
+91
+75
+59
+91
+75
+59
+91
+75
+59
+91
+75
+59
+91
+75
+59
+90
+74
+58
+90
+74
+58
+90
+74
+58
+91
+75
+59
+91
+75
+59
+92
+76
+60
+92
+76
+60
+92
+76
+60
+93
+76
+60
+94
+75
+60
+94
+75
+60
+94
+77
+61
+94
+77
+59
+95
+78
+60
+94
+79
+60
+94
+79
+60
+94
+79
+60
+94
+78
+62
+94
+78
+62
+92
+79
+63
+94
+78
+65
+93
+79
+66
+94
+80
+69
+94
+79
+74
+98
+78
+89
+99
+80
+100
+99
+84
+113
+101
+89
+125
+108
+101
+145
+120
+114
+162
+127
+119
+168
+131
+118
+164
+148
+125
+167
+172
+134
+171
+194
+137
+169
+206
+130
+158
+218
+119
+148
+223
+108
+137
+218
+89
+119
+216
+69
+95
+236
+70
+84
+242
+73
+78
+233
+77
+78
+219
+76
+72
+205
+71
+62
+202
+69
+60
+210
+69
+62
+219
+67
+62
+234
+66
+66
+242
+63
+67
+248
+63
+71
+246
+65
+74
+237
+68
+73
+222
+68
+70
+205
+66
+63
+192
+63
+57
+189
+65
+55
+181
+61
+47
+174
+58
+43
+171
+58
+42
+170
+57
+41
+174
+56
+42
+187
+59
+46
+204
+63
+54
+225
+70
+65
+226
+61
+59
+238
+66
+66
+235
+65
+65
+222
+59
+54
+227
+74
+66
+230
+88
+76
+213
+75
+62
+200
+64
+50
+192
+56
+40
+188
+51
+35
+193
+56
+40
+200
+60
+45
+201
+58
+42
+203
+55
+41
+208
+56
+43
+206
+48
+37
+215
+51
+41
+224
+56
+47
+233
+59
+52
+237
+58
+53
+237
+54
+48
+235
+48
+43
+229
+44
+39
+223
+48
+43
+223
+50
+44
+229
+49
+48
+235
+50
+48
+241
+51
+53
+244
+51
+54
+246
+53
+56
+244
+53
+58
+235
+46
+53
+232
+45
+54
+235
+47
+61
+240
+49
+67
+242
+46
+70
+245
+42
+71
+252
+44
+78
+255
+52
+82
+245
+58
+77
+229
+51
+63
+238
+62
+75
+255
+92
+105
+255
+104
+118
+255
+85
+100
+245
+67
+83
+247
+64
+82
+238
+51
+68
+237
+51
+65
+237
+51
+62
+233
+54
+60
+227
+57
+57
+219
+56
+51
+206
+52
+42
+199
+47
+36
+203
+50
+42
+199
+46
+40
+208
+55
+50
+242
+89
+84
+246
+92
+90
+242
+88
+86
+219
+65
+63
+226
+72
+70
+220
+66
+64
+212
+60
+55
+206
+55
+48
+205
+54
+45
+207
+56
+45
+207
+57
+43
+202
+55
+39
+194
+53
+35
+185
+56
+35
+179
+57
+36
+181
+58
+40
+184
+61
+45
+185
+59
+44
+182
+54
+41
+188
+55
+46
+198
+61
+53
+219
+78
+71
+217
+69
+65
+206
+53
+48
+208
+49
+45
+225
+62
+57
+231
+64
+58
+227
+56
+49
+231
+53
+49
+235
+50
+48
+238
+50
+49
+235
+53
+50
+231
+56
+51
+225
+58
+50
+216
+58
+47
+208
+57
+46
+200
+58
+46
+190
+54
+42
+186
+56
+43
+200
+73
+66
+220
+95
+89
+235
+110
+108
+251
+125
+128
+255
+133
+137
+255
+126
+131
+247
+116
+124
+248
+118
+126
+245
+122
+127
+248
+123
+129
+254
+116
+129
+255
+108
+124
+255
+97
+117
+255
+90
+112
+247
+81
+101
+241
+72
+93
+240
+62
+86
+238
+69
+90
+227
+83
+93
+188
+86
+82
+131
+91
+66
+98
+98
+60
+92
+112
+63
+91
+118
+67
+102
+121
+75
+110
+126
+81
+116
+129
+86
+120
+133
+90
+121
+136
+95
+119
+140
+97
+121
+149
+101
+120
+154
+104
+122
+160
+109
+124
+167
+113
+129
+170
+114
+132
+171
+114
+133
+171
+112
+134
+169
+111
+137
+172
+114
+139
+174
+116
+138
+178
+116
+138
+180
+116
+136
+181
+116
+135
+182
+114
+137
+184
+116
+139
+184
+119
+143
+183
+123
+140
+173
+120
+141
+164
+120
+151
+165
+130
+170
+174
+149
+191
+186
+167
+203
+193
+181
+207
+198
+193
+188
+186
+191
+168
+170
+182
+156
+156
+168
+90
+74
+58
+90
+74
+58
+90
+74
+58
+90
+74
+58
+90
+74
+58
+90
+74
+58
+90
+74
+58
+90
+74
+58
+90
+74
+58
+90
+74
+58
+90
+74
+58
+91
+75
+59
+91
+75
+59
+92
+76
+60
+92
+76
+60
+93
+76
+60
+94
+75
+60
+94
+75
+60
+94
+75
+60
+95
+76
+61
+94
+77
+59
+95
+78
+60
+94
+79
+60
+94
+79
+60
+93
+78
+59
+93
+78
+59
+94
+79
+60
+95
+79
+63
+95
+79
+63
+96
+80
+64
+97
+81
+65
+98
+80
+70
+101
+76
+80
+101
+77
+93
+97
+79
+101
+98
+85
+115
+104
+96
+133
+116
+111
+151
+123
+116
+157
+125
+113
+151
+143
+118
+150
+174
+131
+159
+203
+140
+161
+218
+131
+150
+227
+116
+133
+232
+101
+117
+230
+81
+100
+228
+63
+80
+242
+55
+72
+252
+64
+78
+244
+73
+81
+227
+71
+74
+209
+65
+64
+203
+66
+60
+209
+67
+63
+217
+67
+66
+230
+67
+70
+235
+64
+70
+239
+64
+71
+239
+66
+72
+231
+68
+73
+218
+68
+69
+201
+66
+62
+190
+63
+54
+186
+64
+53
+177
+59
+45
+169
+56
+40
+168
+57
+40
+170
+57
+41
+176
+56
+42
+188
+58
+45
+202
+59
+51
+232
+73
+69
+233
+63
+63
+235
+61
+62
+229
+55
+56
+218
+50
+47
+222
+65
+58
+238
+90
+80
+244
+104
+91
+218
+80
+67
+201
+65
+51
+190
+53
+37
+194
+54
+39
+199
+57
+43
+200
+57
+43
+203
+55
+43
+210
+56
+44
+209
+48
+38
+218
+54
+45
+230
+59
+52
+233
+59
+52
+234
+52
+48
+232
+47
+44
+234
+45
+43
+235
+45
+45
+241
+52
+56
+243
+52
+59
+247
+51
+61
+250
+50
+60
+251
+49
+61
+253
+49
+61
+250
+48
+60
+247
+49
+62
+244
+49
+65
+241
+50
+66
+242
+53
+75
+243
+53
+78
+242
+49
+78
+244
+46
+79
+254
+49
+88
+255
+62
+95
+230
+51
+72
+248
+78
+91
+255
+95
+108
+255
+92
+107
+252
+84
+99
+250
+79
+95
+244
+68
+88
+233
+56
+74
+243
+65
+81
+234
+58
+71
+221
+50
+58
+210
+47
+50
+202
+50
+45
+194
+56
+45
+189
+59
+43
+188
+58
+42
+196
+58
+47
+192
+50
+40
+217
+74
+66
+250
+107
+99
+221
+76
+71
+225
+80
+75
+207
+59
+57
+207
+59
+57
+224
+76
+74
+212
+64
+60
+202
+55
+48
+202
+55
+45
+206
+60
+47
+205
+60
+43
+203
+58
+41
+196
+59
+40
+180
+59
+38
+173
+58
+37
+175
+60
+41
+179
+62
+45
+177
+57
+41
+175
+51
+39
+186
+58
+47
+202
+68
+59
+214
+71
+65
+216
+67
+61
+212
+55
+50
+215
+50
+46
+231
+59
+55
+236
+58
+54
+232
+50
+46
+237
+50
+45
+242
+44
+45
+244
+44
+44
+242
+46
+47
+239
+51
+49
+232
+55
+49
+226
+58
+49
+218
+60
+49
+210
+62
+50
+194
+54
+41
+186
+52
+41
+197
+66
+58
+215
+88
+82
+231
+106
+104
+250
+124
+125
+255
+134
+137
+255
+127
+132
+248
+117
+125
+249
+119
+127
+246
+123
+128
+247
+122
+128
+252
+114
+127
+253
+105
+121
+255
+94
+115
+255
+89
+111
+245
+79
+99
+244
+75
+96
+242
+64
+88
+239
+70
+91
+229
+85
+95
+182
+83
+78
+121
+84
+58
+94
+96
+56
+96
+115
+69
+97
+124
+73
+110
+129
+83
+118
+134
+89
+123
+136
+93
+126
+139
+96
+129
+144
+103
+130
+151
+108
+128
+156
+108
+125
+159
+109
+124
+164
+111
+125
+168
+112
+128
+169
+111
+130
+170
+110
+131
+169
+108
+133
+169
+108
+137
+170
+113
+139
+173
+113
+137
+175
+114
+136
+178
+114
+133
+178
+111
+133
+180
+112
+135
+182
+114
+137
+184
+116
+139
+181
+118
+135
+173
+116
+140
+166
+119
+153
+169
+132
+175
+181
+153
+198
+196
+175
+213
+206
+190
+217
+210
+204
+194
+194
+202
+172
+178
+192
+155
+161
+175
+90
+75
+56
+90
+75
+56
+90
+75
+56
+90
+75
+56
+90
+75
+56
+90
+75
+56
+90
+75
+56
+90
+75
+56
+90
+75
+56
+90
+75
+56
+90
+75
+56
+91
+76
+57
+91
+76
+57
+92
+77
+58
+92
+77
+58
+93
+76
+58
+94
+75
+60
+96
+74
+60
+94
+75
+60
+95
+76
+61
+94
+77
+59
+95
+78
+60
+94
+79
+60
+94
+79
+60
+94
+79
+58
+95
+80
+59
+96
+79
+59
+97
+80
+62
+97
+80
+62
+97
+80
+62
+97
+80
+60
+100
+78
+65
+104
+75
+77
+103
+75
+87
+99
+78
+95
+98
+84
+109
+106
+97
+128
+118
+112
+146
+124
+118
+152
+128
+115
+145
+143
+117
+142
+173
+128
+148
+205
+134
+148
+222
+127
+135
+237
+113
+121
+246
+101
+108
+246
+82
+91
+244
+62
+75
+248
+47
+66
+255
+55
+75
+251
+65
+79
+235
+64
+73
+219
+63
+67
+214
+66
+66
+213
+67
+67
+215
+65
+66
+224
+65
+69
+227
+64
+69
+230
+63
+70
+228
+65
+70
+223
+67
+70
+212
+66
+66
+199
+64
+60
+189
+62
+53
+184
+62
+51
+175
+57
+43
+168
+55
+39
+169
+58
+41
+173
+60
+42
+180
+60
+44
+193
+61
+49
+207
+63
+55
+223
+61
+58
+229
+57
+57
+227
+48
+51
+226
+47
+50
+224
+52
+50
+219
+57
+52
+230
+77
+69
+252
+108
+97
+242
+104
+91
+217
+81
+67
+198
+60
+47
+198
+58
+45
+200
+58
+46
+201
+55
+42
+205
+54
+43
+213
+56
+47
+213
+52
+44
+222
+55
+47
+230
+57
+51
+232
+54
+50
+233
+49
+47
+232
+47
+44
+238
+49
+47
+245
+49
+53
+255
+50
+66
+255
+48
+68
+255
+45
+69
+255
+43
+65
+255
+38
+63
+255
+35
+60
+250
+32
+56
+244
+32
+55
+246
+39
+65
+243
+43
+69
+242
+47
+77
+242
+49
+80
+240
+44
+80
+243
+42
+84
+254
+51
+96
+255
+66
+104
+240
+67
+87
+255
+95
+108
+255
+103
+116
+247
+85
+100
+236
+74
+89
+239
+74
+90
+234
+65
+84
+217
+49
+66
+235
+64
+82
+221
+55
+67
+201
+45
+49
+186
+40
+40
+177
+46
+36
+171
+56
+38
+165
+63
+38
+168
+64
+39
+184
+63
+46
+188
+58
+44
+221
+89
+77
+225
+93
+81
+205
+71
+62
+205
+68
+62
+193
+54
+51
+201
+59
+55
+228
+85
+81
+213
+70
+64
+201
+57
+49
+200
+56
+45
+201
+58
+44
+200
+57
+40
+200
+57
+40
+196
+61
+41
+177
+63
+39
+166
+60
+38
+168
+59
+38
+172
+61
+42
+171
+55
+40
+172
+51
+40
+188
+61
+52
+211
+76
+70
+214
+71
+65
+221
+69
+64
+219
+57
+54
+220
+51
+48
+233
+55
+51
+236
+53
+49
+235
+48
+43
+244
+49
+45
+253
+44
+47
+255
+43
+45
+250
+46
+47
+244
+49
+47
+237
+52
+47
+230
+56
+49
+223
+59
+49
+216
+62
+50
+201
+57
+46
+189
+51
+40
+192
+59
+50
+207
+78
+72
+225
+97
+94
+247
+121
+122
+255
+136
+138
+255
+131
+135
+252
+121
+129
+252
+122
+130
+248
+124
+132
+247
+122
+130
+249
+111
+124
+249
+101
+117
+252
+90
+111
+252
+86
+108
+238
+75
+96
+242
+74
+97
+240
+64
+87
+236
+69
+89
+225
+84
+93
+174
+77
+71
+112
+77
+49
+92
+94
+54
+95
+114
+68
+102
+126
+78
+117
+136
+91
+127
+142
+99
+132
+144
+104
+134
+146
+106
+136
+151
+110
+137
+158
+115
+136
+164
+116
+132
+166
+116
+127
+167
+114
+125
+168
+112
+127
+168
+110
+129
+169
+109
+131
+169
+108
+134
+168
+108
+136
+167
+110
+138
+169
+110
+136
+172
+111
+134
+174
+111
+130
+175
+108
+130
+177
+107
+131
+181
+110
+133
+183
+114
+135
+179
+116
+134
+173
+116
+140
+168
+119
+155
+173
+133
+176
+185
+154
+199
+199
+175
+214
+207
+189
+215
+210
+204
+188
+192
+201
+165
+174
+189
+147
+156
+171
+91
+74
+56
+90
+75
+56
+91
+74
+56
+90
+75
+56
+91
+74
+56
+90
+75
+56
+91
+74
+56
+90
+75
+56
+91
+74
+56
+90
+75
+56
+91
+74
+56
+91
+76
+57
+92
+75
+57
+92
+77
+58
+93
+76
+58
+93
+76
+58
+94
+75
+60
+94
+75
+60
+94
+75
+60
+94
+77
+61
+94
+77
+61
+94
+79
+60
+94
+79
+60
+92
+79
+60
+96
+81
+62
+97
+82
+61
+97
+82
+63
+98
+81
+63
+98
+81
+63
+97
+80
+62
+97
+79
+59
+98
+76
+63
+107
+77
+75
+106
+76
+84
+101
+79
+92
+100
+87
+107
+107
+101
+127
+120
+117
+148
+125
+124
+156
+127
+120
+151
+145
+122
+148
+171
+129
+149
+198
+132
+144
+217
+126
+133
+238
+117
+122
+252
+109
+111
+253
+90
+91
+249
+70
+76
+247
+52
+69
+255
+58
+78
+251
+64
+81
+238
+63
+76
+229
+65
+74
+225
+69
+73
+221
+66
+70
+215
+60
+64
+222
+63
+68
+223
+62
+67
+225
+62
+67
+222
+64
+65
+218
+66
+65
+208
+65
+61
+197
+62
+56
+188
+61
+52
+181
+63
+49
+172
+59
+43
+169
+56
+40
+173
+60
+44
+180
+63
+46
+187
+64
+49
+202
+65
+55
+216
+67
+61
+217
+55
+52
+225
+56
+53
+222
+46
+46
+226
+51
+48
+230
+58
+54
+211
+48
+39
+207
+53
+41
+235
+85
+71
+255
+119
+106
+235
+91
+80
+209
+67
+55
+202
+60
+48
+203
+59
+48
+201
+55
+42
+205
+54
+43
+212
+58
+48
+218
+55
+48
+223
+56
+50
+229
+54
+51
+231
+51
+50
+234
+48
+49
+237
+49
+50
+244
+51
+54
+252
+53
+60
+252
+37
+53
+255
+35
+56
+255
+34
+56
+255
+33
+56
+255
+32
+55
+255
+31
+53
+251
+29
+52
+246
+30
+53
+237
+28
+50
+236
+32
+57
+237
+39
+66
+238
+41
+71
+237
+39
+74
+239
+41
+77
+253
+53
+92
+255
+70
+104
+255
+96
+115
+254
+94
+106
+247
+85
+98
+242
+80
+93
+242
+80
+93
+240
+75
+89
+227
+62
+76
+210
+48
+59
+218
+61
+70
+205
+54
+59
+187
+47
+46
+175
+46
+40
+168
+52
+39
+162
+59
+40
+155
+63
+38
+157
+61
+37
+170
+57
+39
+178
+56
+43
+210
+86
+74
+187
+59
+50
+196
+63
+56
+190
+52
+49
+189
+50
+47
+206
+67
+64
+229
+87
+83
+213
+72
+65
+200
+57
+49
+196
+54
+42
+197
+54
+40
+196
+53
+37
+198
+53
+36
+195
+58
+40
+177
+60
+40
+167
+58
+38
+168
+55
+37
+173
+57
+42
+172
+52
+38
+175
+49
+37
+194
+63
+53
+219
+82
+74
+217
+73
+65
+225
+72
+66
+222
+59
+54
+222
+50
+46
+234
+52
+49
+237
+49
+47
+239
+45
+43
+252
+50
+50
+254
+44
+47
+253
+43
+46
+249
+43
+45
+243
+43
+43
+237
+45
+42
+230
+49
+42
+223
+52
+44
+214
+56
+44
+209
+61
+49
+191
+50
+40
+188
+55
+46
+200
+73
+66
+217
+92
+88
+243
+119
+119
+255
+137
+139
+255
+134
+138
+253
+126
+133
+255
+125
+133
+252
+125
+134
+253
+119
+130
+252
+107
+122
+249
+96
+114
+249
+87
+108
+249
+83
+105
+234
+68
+92
+240
+71
+94
+236
+59
+85
+228
+65
+86
+215
+81
+90
+162
+73
+67
+102
+70
+45
+88
+93
+53
+90
+109
+63
+98
+125
+74
+116
+140
+92
+128
+150
+103
+135
+152
+108
+136
+155
+110
+138
+160
+114
+139
+165
+118
+140
+172
+122
+134
+171
+119
+129
+170
+114
+126
+167
+109
+124
+165
+105
+125
+165
+103
+129
+165
+103
+131
+165
+105
+131
+164
+107
+133
+166
+109
+132
+170
+109
+130
+172
+108
+128
+173
+104
+128
+175
+105
+129
+179
+106
+132
+182
+111
+137
+182
+115
+136
+176
+114
+140
+173
+120
+153
+176
+132
+172
+188
+152
+189
+198
+169
+201
+203
+181
+203
+205
+194
+182
+191
+196
+159
+171
+183
+140
+152
+164
+93
+75
+55
+92
+75
+55
+93
+75
+55
+92
+75
+55
+93
+75
+55
+92
+75
+55
+93
+75
+55
+92
+75
+55
+94
+76
+56
+93
+76
+56
+94
+76
+56
+93
+76
+56
+94
+76
+56
+93
+76
+56
+94
+76
+56
+93
+76
+58
+93
+74
+60
+93
+75
+61
+94
+76
+62
+92
+76
+60
+92
+76
+60
+91
+78
+61
+93
+80
+63
+94
+83
+65
+96
+83
+66
+95
+82
+63
+96
+80
+64
+98
+81
+65
+99
+82
+66
+100
+81
+66
+100
+78
+65
+100
+76
+66
+107
+75
+76
+104
+75
+80
+101
+79
+91
+102
+91
+108
+110
+107
+134
+120
+123
+156
+129
+133
+170
+137
+137
+173
+143
+132
+166
+165
+136
+166
+190
+136
+159
+208
+130
+144
+225
+121
+128
+240
+114
+115
+249
+106
+102
+255
+97
+96
+244
+77
+87
+237
+65
+79
+231
+61
+74
+233
+66
+76
+235
+69
+79
+231
+65
+75
+228
+61
+69
+229
+62
+70
+226
+59
+66
+224
+59
+63
+221
+58
+61
+217
+59
+58
+212
+60
+57
+204
+59
+54
+196
+58
+48
+185
+57
+44
+167
+54
+38
+175
+65
+48
+173
+60
+44
+172
+54
+40
+191
+65
+53
+204
+70
+61
+204
+61
+53
+208
+55
+50
+218
+56
+53
+220
+55
+49
+222
+53
+46
+222
+54
+45
+222
+56
+42
+221
+60
+42
+215
+58
+39
+211
+54
+37
+217
+59
+48
+240
+83
+76
+242
+90
+79
+217
+69
+57
+199
+56
+42
+205
+62
+46
+212
+66
+51
+210
+58
+45
+211
+50
+42
+240
+71
+66
+225
+47
+47
+239
+54
+59
+244
+55
+62
+239
+45
+56
+255
+66
+77
+240
+40
+51
+250
+38
+50
+255
+41
+50
+255
+41
+50
+249
+29
+39
+253
+34
+42
+255
+39
+47
+254
+39
+47
+240
+29
+38
+238
+31
+41
+248
+44
+55
+233
+33
+46
+235
+38
+55
+240
+44
+64
+227
+33
+57
+255
+86
+112
+229
+43
+66
+255
+92
+108
+255
+94
+105
+255
+89
+99
+251
+84
+92
+246
+79
+87
+236
+71
+77
+222
+62
+64
+208
+54
+52
+204
+61
+55
+197
+64
+55
+184
+62
+49
+167
+54
+38
+156
+49
+33
+154
+53
+35
+157
+58
+39
+160
+59
+41
+167
+56
+45
+174
+55
+47
+194
+69
+63
+191
+59
+55
+189
+51
+49
+196
+54
+52
+197
+53
+52
+212
+68
+67
+219
+76
+72
+218
+75
+69
+209
+68
+59
+200
+58
+48
+196
+52
+41
+199
+53
+40
+203
+52
+41
+197
+53
+42
+188
+60
+47
+179
+57
+44
+173
+47
+35
+171
+40
+30
+179
+45
+36
+195
+57
+47
+210
+67
+59
+216
+72
+63
+228
+80
+70
+223
+69
+61
+218
+55
+48
+221
+48
+42
+231
+48
+44
+242
+50
+49
+249
+49
+51
+253
+49
+52
+247
+47
+49
+246
+48
+49
+246
+48
+49
+243
+48
+46
+242
+48
+46
+237
+50
+45
+230
+53
+45
+221
+57
+47
+213
+61
+48
+190
+50
+37
+192
+62
+49
+185
+61
+51
+214
+95
+89
+233
+115
+113
+255
+143
+143
+251
+132
+134
+255
+135
+140
+255
+132
+141
+255
+120
+135
+253
+104
+123
+252
+95
+116
+254
+92
+115
+250
+86
+110
+243
+77
+101
+242
+72
+99
+235
+60
+89
+237
+62
+91
+224
+66
+89
+216
+94
+105
+141
+63
+59
+92
+67
+45
+83
+91
+54
+92
+116
+66
+103
+134
+77
+119
+150
+93
+125
+156
+99
+127
+157
+103
+128
+161
+106
+131
+166
+110
+130
+168
+111
+128
+167
+110
+127
+166
+109
+126
+165
+108
+125
+165
+105
+124
+164
+104
+125
+163
+102
+127
+163
+101
+127
+163
+102
+127
+165
+108
+127
+166
+109
+129
+171
+108
+127
+172
+107
+126
+173
+103
+127
+174
+102
+129
+177
+103
+131
+179
+105
+135
+181
+109
+139
+180
+114
+139
+177
+118
+142
+174
+124
+153
+180
+137
+167
+189
+153
+175
+194
+164
+178
+193
+174
+163
+175
+173
+141
+152
+158
+124
+135
+141
+93
+75
+55
+93
+75
+55
+93
+75
+55
+93
+75
+55
+93
+75
+55
+93
+75
+55
+93
+75
+55
+93
+75
+55
+94
+76
+56
+94
+76
+56
+94
+76
+56
+94
+76
+56
+94
+76
+56
+94
+76
+56
+94
+76
+56
+94
+75
+58
+92
+75
+59
+94
+76
+62
+95
+77
+63
+94
+78
+62
+91
+78
+61
+91
+78
+61
+92
+81
+63
+94
+82
+66
+95
+83
+67
+93
+81
+65
+93
+79
+66
+95
+79
+66
+96
+78
+68
+98
+80
+70
+99
+79
+72
+101
+77
+73
+105
+76
+78
+103
+78
+84
+101
+83
+97
+103
+95
+116
+110
+111
+142
+121
+126
+166
+128
+136
+183
+135
+139
+187
+158
+150
+199
+163
+140
+182
+171
+127
+160
+185
+120
+142
+211
+121
+133
+234
+124
+125
+244
+117
+111
+244
+105
+100
+245
+94
+99
+238
+81
+90
+233
+71
+82
+238
+74
+83
+243
+76
+86
+242
+71
+80
+238
+64
+74
+234
+60
+69
+228
+57
+63
+224
+58
+60
+220
+57
+58
+215
+60
+56
+210
+61
+55
+203
+60
+52
+196
+58
+47
+186
+59
+44
+171
+60
+43
+170
+63
+45
+169
+56
+40
+178
+58
+44
+193
+65
+54
+197
+60
+52
+199
+54
+49
+212
+60
+55
+210
+53
+48
+214
+53
+45
+215
+53
+42
+216
+52
+40
+217
+56
+38
+219
+58
+38
+219
+59
+37
+218
+57
+39
+221
+54
+46
+230
+65
+59
+235
+77
+68
+225
+73
+60
+208
+62
+47
+199
+56
+40
+202
+56
+41
+211
+59
+46
+221
+58
+51
+245
+73
+69
+228
+48
+49
+241
+55
+60
+246
+54
+65
+241
+46
+60
+255
+63
+77
+237
+37
+50
+243
+36
+44
+247
+37
+40
+251
+41
+44
+253
+43
+44
+252
+42
+43
+248
+40
+40
+246
+40
+40
+247
+43
+44
+239
+36
+39
+237
+37
+40
+234
+37
+44
+253
+59
+68
+216
+26
+38
+238
+50
+65
+250
+63
+80
+213
+35
+51
+255
+104
+117
+255
+97
+106
+255
+90
+97
+253
+86
+93
+247
+78
+83
+231
+65
+67
+218
+59
+56
+210
+61
+54
+193
+55
+44
+194
+66
+53
+188
+71
+54
+172
+61
+44
+154
+47
+31
+147
+39
+26
+146
+38
+25
+147
+39
+27
+158
+45
+37
+176
+58
+54
+209
+84
+80
+206
+72
+71
+195
+53
+52
+198
+52
+53
+209
+61
+61
+235
+87
+85
+216
+71
+66
+214
+71
+63
+208
+65
+57
+199
+57
+47
+198
+51
+41
+202
+54
+44
+208
+55
+47
+206
+55
+48
+199
+61
+51
+194
+57
+49
+194
+53
+46
+195
+50
+45
+201
+52
+46
+209
+56
+51
+216
+63
+57
+222
+69
+61
+228
+74
+64
+222
+65
+56
+218
+54
+45
+221
+48
+42
+231
+48
+44
+242
+50
+49
+251
+48
+51
+251
+48
+51
+244
+48
+50
+243
+49
+50
+244
+48
+49
+243
+47
+48
+243
+48
+46
+238
+49
+45
+231
+52
+45
+223
+57
+45
+215
+61
+49
+191
+51
+36
+190
+60
+47
+183
+61
+50
+211
+94
+87
+233
+118
+115
+255
+144
+144
+249
+133
+136
+253
+134
+140
+255
+128
+138
+255
+115
+132
+255
+100
+121
+255
+92
+116
+255
+89
+114
+252
+84
+110
+246
+76
+103
+243
+68
+97
+236
+61
+90
+236
+66
+95
+223
+74
+96
+194
+83
+92
+128
+61
+55
+88
+67
+46
+82
+92
+57
+91
+118
+67
+101
+135
+75
+115
+149
+89
+120
+156
+95
+119
+157
+98
+123
+161
+102
+125
+165
+105
+125
+166
+106
+124
+165
+105
+124
+165
+105
+124
+164
+104
+123
+163
+101
+123
+161
+100
+123
+161
+100
+125
+161
+99
+126
+162
+101
+124
+163
+106
+125
+166
+108
+125
+169
+108
+125
+170
+105
+124
+171
+101
+125
+173
+99
+127
+175
+99
+130
+177
+99
+133
+176
+104
+135
+178
+107
+136
+175
+112
+136
+171
+115
+139
+171
+124
+144
+172
+132
+144
+170
+135
+140
+162
+139
+118
+133
+126
+99
+111
+111
+83
+95
+95
+93
+76
+56
+93
+76
+56
+93
+76
+56
+93
+76
+56
+93
+76
+56
+93
+76
+56
+93
+76
+56
+93
+76
+56
+93
+76
+56
+93
+76
+56
+93
+76
+56
+93
+76
+56
+93
+76
+56
+93
+76
+56
+93
+76
+56
+93
+76
+56
+94
+75
+58
+95
+78
+62
+97
+80
+64
+96
+80
+64
+93
+80
+63
+92
+79
+62
+91
+79
+63
+91
+82
+67
+91
+81
+69
+91
+81
+71
+92
+79
+71
+92
+79
+73
+95
+80
+77
+99
+81
+79
+102
+84
+84
+103
+84
+86
+103
+84
+88
+103
+86
+96
+104
+92
+112
+108
+105
+134
+115
+118
+161
+124
+131
+185
+130
+138
+201
+138
+142
+206
+152
+146
+210
+160
+139
+196
+170
+131
+178
+185
+125
+159
+207
+128
+147
+228
+131
+138
+238
+126
+122
+242
+115
+109
+248
+102
+105
+242
+85
+92
+234
+73
+81
+237
+72
+79
+243
+73
+82
+245
+71
+81
+242
+65
+75
+238
+61
+69
+228
+55
+61
+224
+55
+58
+219
+56
+57
+213
+60
+55
+207
+63
+55
+201
+63
+52
+193
+61
+48
+184
+61
+45
+174
+61
+45
+170
+60
+43
+171
+58
+44
+184
+66
+54
+199
+72
+63
+192
+59
+50
+187
+48
+41
+202
+58
+50
+205
+54
+47
+208
+54
+46
+213
+55
+44
+216
+56
+44
+217
+55
+40
+217
+56
+38
+220
+57
+38
+224
+58
+42
+221
+52
+45
+219
+52
+46
+226
+65
+57
+233
+79
+67
+222
+72
+58
+200
+53
+37
+200
+50
+35
+217
+64
+50
+226
+62
+53
+245
+72
+68
+231
+48
+50
+242
+53
+59
+248
+54
+63
+245
+49
+61
+255
+66
+80
+244
+46
+59
+240
+41
+48
+235
+35
+38
+236
+36
+39
+249
+49
+51
+245
+45
+47
+239
+39
+39
+236
+38
+37
+245
+49
+50
+234
+40
+41
+245
+55
+57
+231
+42
+48
+225
+40
+48
+234
+50
+60
+255
+81
+93
+237
+59
+73
+255
+89
+101
+255
+94
+102
+242
+85
+92
+239
+78
+84
+241
+76
+82
+235
+69
+73
+222
+58
+59
+214
+55
+52
+214
+62
+57
+194
+53
+44
+194
+62
+50
+189
+65
+53
+181
+60
+49
+173
+55
+45
+168
+49
+41
+162
+43
+35
+157
+38
+32
+155
+36
+30
+169
+47
+42
+199
+69
+67
+194
+58
+58
+188
+44
+44
+200
+51
+53
+215
+65
+66
+244
+94
+93
+208
+63
+58
+210
+67
+59
+208
+65
+57
+203
+61
+51
+204
+57
+47
+212
+61
+52
+218
+64
+56
+219
+64
+59
+219
+64
+60
+216
+61
+59
+221
+62
+59
+227
+65
+63
+228
+62
+62
+224
+58
+58
+227
+63
+61
+235
+73
+68
+224
+66
+57
+221
+60
+52
+217
+53
+44
+221
+50
+43
+231
+49
+45
+240
+51
+49
+245
+49
+50
+248
+48
+50
+244
+48
+50
+244
+48
+50
+244
+48
+49
+243
+47
+48
+243
+48
+46
+238
+49
+45
+231
+52
+45
+223
+57
+45
+216
+62
+50
+192
+52
+37
+186
+56
+43
+181
+59
+48
+208
+91
+84
+237
+122
+119
+255
+147
+146
+251
+135
+138
+253
+129
+137
+255
+124
+137
+255
+113
+129
+253
+100
+120
+254
+90
+114
+255
+85
+111
+252
+79
+107
+250
+73
+102
+244
+65
+95
+238
+63
+92
+234
+71
+98
+223
+84
+103
+165
+64
+72
+117
+56
+51
+88
+70
+50
+85
+95
+60
+95
+119
+69
+102
+135
+78
+114
+147
+90
+117
+152
+94
+116
+154
+95
+120
+158
+99
+123
+163
+103
+123
+163
+103
+121
+162
+102
+121
+162
+102
+121
+161
+99
+120
+160
+98
+121
+159
+98
+121
+160
+97
+124
+160
+98
+122
+160
+99
+122
+162
+102
+123
+164
+104
+123
+167
+104
+123
+168
+101
+123
+169
+97
+123
+169
+96
+125
+171
+96
+127
+174
+96
+135
+178
+106
+138
+181
+110
+139
+178
+115
+137
+172
+116
+134
+166
+119
+130
+158
+117
+121
+147
+110
+111
+134
+108
+81
+99
+87
+64
+79
+76
+50
+65
+62
+94
+77
+57
+94
+77
+57
+94
+77
+57
+94
+77
+57
+94
+77
+57
+94
+77
+57
+94
+77
+57
+94
+77
+57
+94
+77
+57
+94
+77
+57
+94
+77
+57
+94
+77
+57
+94
+77
+57
+94
+77
+57
+94
+77
+57
+94
+77
+57
+94
+76
+56
+96
+78
+58
+97
+80
+60
+96
+81
+62
+93
+80
+63
+90
+78
+62
+89
+79
+67
+88
+80
+69
+88
+79
+72
+91
+81
+79
+95
+85
+84
+98
+88
+89
+101
+88
+95
+105
+89
+99
+108
+92
+102
+107
+94
+104
+108
+96
+108
+108
+99
+116
+111
+107
+134
+114
+116
+155
+121
+126
+181
+127
+135
+200
+133
+141
+214
+140
+143
+220
+142
+135
+212
+159
+139
+208
+173
+138
+194
+179
+129
+167
+189
+121
+144
+204
+123
+130
+222
+129
+124
+241
+130
+123
+254
+116
+116
+253
+100
+103
+244
+88
+92
+242
+79
+84
+242
+73
+80
+242
+68
+77
+240
+63
+71
+239
+60
+66
+229
+54
+59
+225
+55
+56
+219
+57
+55
+213
+60
+55
+206
+64
+54
+198
+64
+52
+191
+64
+49
+184
+63
+46
+173
+57
+42
+173
+62
+45
+177
+61
+48
+188
+70
+58
+204
+82
+71
+199
+72
+63
+186
+53
+46
+186
+49
+41
+200
+57
+49
+205
+56
+49
+211
+59
+48
+217
+61
+49
+219
+59
+45
+217
+54
+39
+220
+54
+38
+224
+56
+43
+224
+53
+45
+219
+50
+43
+224
+61
+52
+236
+78
+66
+227
+75
+61
+210
+58
+44
+209
+56
+42
+224
+66
+54
+222
+54
+45
+240
+62
+58
+233
+47
+48
+239
+48
+53
+245
+50
+58
+248
+52
+62
+255
+74
+86
+255
+70
+79
+253
+62
+69
+242
+51
+56
+226
+36
+38
+237
+47
+49
+234
+44
+44
+240
+50
+50
+232
+42
+42
+235
+47
+46
+241
+57
+57
+209
+26
+28
+229
+50
+54
+220
+43
+49
+231
+56
+63
+239
+68
+76
+255
+87
+98
+241
+75
+85
+217
+60
+67
+219
+64
+68
+225
+66
+70
+225
+62
+65
+222
+57
+61
+220
+56
+57
+218
+55
+56
+212
+57
+55
+201
+56
+51
+195
+56
+49
+190
+57
+50
+193
+64
+58
+206
+77
+72
+215
+85
+83
+210
+77
+78
+196
+66
+64
+178
+55
+50
+182
+57
+53
+207
+75
+73
+217
+77
+76
+227
+81
+82
+239
+89
+90
+234
+82
+81
+241
+89
+86
+201
+53
+49
+206
+62
+54
+210
+66
+57
+208
+64
+55
+211
+63
+53
+217
+66
+57
+224
+67
+60
+226
+64
+59
+233
+63
+64
+231
+56
+61
+236
+57
+61
+242
+63
+67
+239
+58
+63
+232
+53
+56
+236
+62
+61
+246
+77
+74
+222
+57
+51
+219
+54
+48
+218
+51
+43
+222
+51
+44
+229
+52
+46
+236
+51
+48
+242
+50
+49
+244
+48
+49
+244
+48
+50
+246
+47
+50
+246
+48
+49
+245
+47
+48
+245
+47
+46
+240
+48
+45
+233
+52
+45
+224
+56
+45
+217
+63
+51
+194
+54
+39
+183
+53
+40
+179
+57
+46
+203
+86
+79
+239
+124
+121
+255
+147
+146
+254
+135
+139
+255
+128
+137
+255
+121
+135
+252
+110
+126
+250
+99
+118
+250
+88
+111
+252
+80
+106
+251
+72
+102
+250
+67
+98
+242
+61
+92
+239
+66
+94
+229
+77
+100
+215
+90
+104
+136
+50
+53
+107
+57
+48
+92
+77
+56
+91
+101
+67
+99
+123
+75
+106
+137
+80
+115
+146
+89
+116
+149
+92
+117
+152
+94
+119
+157
+98
+121
+161
+101
+122
+162
+102
+119
+160
+100
+118
+160
+97
+119
+159
+97
+118
+158
+96
+120
+159
+96
+120
+159
+96
+123
+159
+97
+122
+160
+99
+122
+162
+102
+122
+163
+103
+122
+167
+102
+122
+167
+98
+122
+168
+96
+122
+168
+93
+124
+171
+93
+126
+173
+95
+134
+178
+103
+139
+180
+110
+140
+179
+116
+138
+173
+115
+134
+166
+117
+128
+157
+113
+116
+142
+105
+105
+128
+100
+80
+98
+84
+67
+82
+75
+56
+71
+64
+94
+77
+59
+94
+77
+59
+94
+77
+59
+94
+77
+59
+94
+77
+59
+94
+77
+59
+94
+77
+59
+94
+77
+59
+94
+77
+59
+94
+77
+59
+94
+77
+59
+94
+77
+59
+94
+77
+59
+94
+77
+59
+94
+77
+59
+94
+77
+57
+93
+75
+53
+95
+77
+53
+96
+80
+57
+95
+80
+59
+92
+79
+62
+90
+78
+64
+88
+79
+70
+88
+81
+75
+89
+80
+81
+96
+87
+92
+103
+96
+104
+110
+102
+115
+115
+104
+121
+115
+103
+123
+115
+103
+125
+113
+103
+127
+111
+108
+129
+112
+112
+138
+114
+118
+153
+118
+124
+172
+122
+130
+193
+127
+135
+208
+132
+139
+220
+138
+140
+225
+147
+142
+224
+157
+141
+214
+160
+132
+190
+158
+117
+159
+160
+108
+130
+172
+110
+115
+188
+117
+111
+210
+118
+107
+240
+115
+109
+253
+109
+108
+254
+104
+105
+251
+95
+96
+249
+83
+87
+244
+71
+77
+237
+60
+66
+234
+55
+61
+232
+53
+59
+227
+54
+56
+221
+57
+56
+215
+60
+55
+208
+64
+55
+199
+65
+53
+192
+65
+48
+185
+64
+47
+173
+55
+41
+180
+64
+51
+175
+58
+48
+176
+59
+49
+200
+82
+72
+213
+92
+81
+201
+77
+67
+187
+59
+48
+190
+57
+48
+193
+55
+45
+204
+57
+47
+214
+62
+51
+219
+61
+49
+218
+54
+42
+220
+52
+39
+226
+54
+42
+224
+51
+44
+226
+55
+48
+228
+61
+53
+229
+69
+57
+226
+70
+57
+222
+66
+51
+222
+65
+50
+226
+62
+50
+219
+48
+38
+234
+55
+50
+236
+48
+47
+238
+45
+48
+239
+44
+50
+246
+51
+59
+255
+76
+84
+255
+87
+94
+255
+90
+95
+255
+79
+83
+225
+46
+49
+227
+48
+51
+224
+44
+45
+247
+69
+69
+232
+54
+54
+220
+44
+44
+218
+44
+45
+234
+61
+63
+219
+49
+52
+216
+50
+54
+255
+98
+104
+224
+61
+66
+202
+41
+49
+202
+45
+52
+193
+38
+42
+213
+59
+61
+224
+65
+69
+218
+55
+58
+217
+51
+55
+223
+57
+61
+220
+55
+59
+205
+47
+48
+204
+52
+51
+205
+59
+59
+211
+71
+70
+221
+83
+83
+235
+96
+99
+245
+105
+108
+244
+101
+107
+234
+94
+97
+196
+64
+62
+198
+69
+64
+229
+94
+91
+248
+104
+103
+255
+111
+112
+255
+106
+106
+229
+75
+75
+215
+61
+59
+201
+52
+48
+209
+62
+55
+215
+68
+60
+214
+67
+59
+213
+62
+53
+213
+60
+52
+216
+58
+49
+220
+52
+49
+238
+53
+59
+241
+45
+55
+240
+44
+54
+242
+46
+56
+239
+44
+52
+235
+44
+51
+243
+57
+60
+254
+74
+75
+223
+51
+47
+220
+51
+46
+218
+51
+43
+220
+51
+44
+227
+53
+46
+234
+52
+48
+239
+52
+47
+242
+50
+49
+244
+48
+50
+246
+47
+50
+247
+47
+49
+246
+46
+48
+245
+47
+46
+240
+48
+45
+234
+51
+45
+226
+55
+45
+217
+63
+51
+198
+56
+42
+180
+50
+37
+178
+56
+45
+195
+78
+71
+239
+124
+121
+255
+146
+145
+255
+135
+140
+255
+126
+137
+255
+117
+132
+249
+108
+124
+246
+97
+116
+245
+85
+109
+247
+74
+102
+249
+64
+96
+249
+59
+93
+243
+58
+92
+237
+68
+97
+219
+80
+101
+193
+87
+97
+114
+46
+43
+98
+62
+48
+96
+84
+62
+99
+106
+73
+102
+124
+77
+107
+137
+83
+116
+146
+92
+117
+150
+95
+118
+153
+95
+120
+158
+99
+121
+161
+99
+120
+160
+98
+117
+159
+96
+117
+159
+96
+117
+157
+95
+118
+158
+95
+119
+158
+95
+120
+159
+96
+123
+159
+97
+122
+161
+98
+122
+162
+100
+123
+165
+101
+124
+166
+100
+124
+167
+96
+121
+167
+94
+121
+168
+90
+123
+170
+92
+125
+172
+94
+128
+172
+97
+133
+175
+103
+135
+174
+109
+135
+170
+112
+133
+165
+115
+131
+160
+114
+123
+149
+110
+114
+138
+106
+100
+119
+100
+91
+107
+94
+81
+97
+84
+95
+78
+60
+95
+78
+60
+95
+78
+60
+95
+78
+60
+95
+78
+60
+95
+78
+60
+95
+78
+60
+95
+78
+60
+95
+78
+60
+95
+78
+60
+95
+78
+60
+95
+78
+60
+95
+78
+60
+95
+78
+60
+95
+78
+60
+95
+78
+58
+94
+76
+52
+95
+78
+52
+96
+78
+56
+94
+79
+58
+91
+78
+62
+89
+79
+69
+90
+83
+77
+90
+84
+84
+95
+90
+97
+104
+98
+112
+114
+109
+129
+122
+117
+140
+123
+117
+145
+123
+113
+147
+122
+112
+147
+118
+112
+148
+113
+116
+149
+114
+119
+157
+116
+124
+170
+119
+128
+183
+122
+131
+196
+126
+134
+207
+132
+138
+216
+139
+141
+218
+150
+144
+218
+153
+139
+201
+155
+133
+180
+162
+131
+162
+170
+132
+145
+171
+126
+123
+159
+107
+93
+153
+82
+64
+186
+78
+66
+210
+82
+73
+225
+88
+82
+233
+88
+85
+239
+84
+82
+241
+75
+77
+236
+63
+67
+229
+52
+58
+235
+56
+60
+231
+57
+59
+226
+58
+57
+218
+61
+56
+211
+64
+56
+203
+65
+54
+195
+63
+48
+188
+62
+47
+179
+57
+44
+186
+65
+54
+171
+53
+43
+163
+46
+36
+190
+73
+63
+217
+103
+92
+217
+100
+90
+203
+85
+73
+184
+60
+50
+184
+54
+41
+192
+51
+41
+206
+58
+48
+217
+59
+48
+218
+54
+44
+222
+51
+41
+228
+54
+45
+223
+49
+42
+228
+55
+49
+227
+59
+50
+221
+57
+47
+222
+62
+48
+227
+70
+53
+228
+66
+51
+223
+57
+43
+222
+48
+39
+233
+52
+45
+240
+51
+49
+239
+45
+46
+236
+41
+45
+242
+47
+53
+255
+66
+71
+255
+82
+87
+255
+93
+98
+255
+92
+97
+226
+57
+60
+227
+57
+60
+213
+43
+44
+244
+74
+75
+226
+56
+57
+215
+47
+47
+217
+51
+53
+203
+39
+40
+202
+37
+41
+247
+87
+89
+220
+61
+65
+213
+57
+61
+209
+54
+58
+186
+31
+35
+196
+40
+43
+219
+61
+62
+229
+66
+69
+219
+53
+57
+215
+44
+50
+220
+49
+55
+217
+48
+53
+204
+41
+46
+208
+52
+55
+226
+76
+78
+244
+98
+101
+250
+105
+110
+247
+100
+108
+246
+96
+105
+248
+96
+108
+248
+98
+107
+214
+76
+76
+213
+78
+74
+234
+92
+90
+234
+86
+84
+231
+77
+77
+227
+72
+70
+207
+52
+50
+206
+51
+47
+217
+65
+60
+224
+75
+68
+228
+79
+72
+223
+74
+67
+217
+64
+56
+215
+58
+51
+215
+54
+46
+220
+46
+45
+245
+50
+58
+251
+45
+58
+248
+42
+55
+245
+39
+52
+245
+41
+52
+248
+48
+58
+255
+62
+67
+255
+74
+74
+224
+49
+46
+222
+51
+44
+220
+51
+44
+221
+53
+44
+225
+52
+45
+231
+52
+47
+237
+52
+47
+240
+51
+47
+244
+48
+50
+247
+47
+50
+249
+46
+49
+248
+45
+48
+246
+46
+46
+241
+47
+45
+235
+50
+45
+226
+55
+45
+217
+61
+49
+201
+59
+45
+179
+49
+36
+177
+55
+44
+186
+67
+61
+236
+121
+118
+255
+141
+141
+255
+136
+141
+255
+123
+135
+255
+113
+129
+246
+104
+120
+243
+96
+114
+243
+83
+107
+244
+69
+98
+249
+58
+92
+249
+55
+90
+243
+58
+92
+235
+72
+99
+205
+80
+96
+160
+74
+77
+102
+52
+43
+89
+66
+48
+95
+87
+64
+99
+106
+73
+102
+124
+78
+107
+136
+82
+116
+145
+91
+119
+149
+95
+120
+153
+96
+123
+158
+100
+122
+160
+99
+118
+158
+96
+115
+155
+93
+114
+156
+92
+115
+155
+92
+116
+156
+93
+118
+157
+94
+119
+158
+95
+123
+159
+97
+122
+161
+98
+121
+161
+98
+122
+164
+98
+124
+167
+98
+123
+166
+95
+120
+166
+91
+120
+167
+89
+122
+169
+89
+123
+170
+90
+126
+170
+95
+131
+173
+101
+133
+172
+107
+135
+169
+109
+137
+167
+115
+137
+165
+117
+132
+157
+115
+124
+148
+114
+117
+137
+112
+111
+128
+109
+103
+120
+102
+95
+80
+61
+95
+80
+61
+95
+80
+61
+95
+80
+61
+95
+80
+61
+95
+80
+61
+95
+80
+61
+95
+80
+61
+94
+79
+60
+94
+79
+60
+94
+79
+60
+94
+79
+60
+94
+79
+60
+94
+79
+60
+94
+79
+60
+95
+78
+58
+97
+80
+54
+97
+80
+54
+97
+79
+57
+94
+79
+60
+91
+79
+65
+91
+82
+75
+92
+86
+86
+95
+90
+97
+107
+103
+118
+115
+111
+134
+125
+122
+151
+130
+126
+161
+129
+124
+165
+125
+119
+163
+123
+117
+165
+120
+118
+167
+115
+121
+171
+115
+125
+178
+120
+129
+184
+123
+132
+191
+126
+134
+196
+132
+138
+200
+141
+142
+206
+148
+147
+205
+154
+147
+198
+160
+150
+187
+171
+156
+179
+188
+167
+176
+201
+173
+169
+197
+166
+148
+170
+136
+109
+154
+103
+76
+155
+70
+50
+173
+65
+52
+181
+65
+52
+194
+66
+57
+214
+72
+68
+232
+78
+78
+238
+74
+75
+236
+63
+67
+235
+61
+63
+233
+59
+61
+229
+59
+59
+224
+60
+58
+217
+64
+56
+210
+63
+53
+202
+62
+49
+194
+60
+48
+189
+58
+48
+190
+63
+54
+175
+52
+44
+167
+49
+39
+187
+73
+63
+209
+99
+86
+214
+104
+91
+213
+101
+87
+195
+79
+66
+186
+62
+50
+186
+52
+41
+199
+55
+44
+214
+57
+48
+217
+53
+44
+223
+50
+43
+231
+54
+48
+226
+48
+44
+227
+52
+47
+226
+55
+47
+222
+55
+46
+224
+62
+49
+229
+67
+52
+228
+62
+48
+222
+52
+37
+229
+51
+41
+232
+47
+42
+240
+51
+47
+240
+46
+46
+239
+45
+46
+241
+48
+51
+242
+54
+55
+244
+64
+67
+246
+77
+82
+252
+89
+94
+233
+70
+75
+246
+81
+87
+216
+51
+55
+235
+70
+74
+221
+56
+60
+230
+65
+69
+216
+53
+56
+204
+44
+46
+207
+46
+51
+226
+70
+73
+210
+55
+59
+208
+55
+58
+185
+35
+37
+213
+59
+61
+217
+57
+59
+226
+60
+62
+232
+62
+65
+230
+55
+60
+223
+46
+54
+219
+42
+50
+224
+50
+59
+228
+61
+68
+238
+77
+83
+250
+95
+101
+255
+109
+115
+255
+106
+115
+248
+97
+106
+245
+91
+103
+246
+90
+104
+246
+92
+102
+244
+100
+100
+232
+90
+86
+232
+87
+84
+216
+64
+61
+207
+49
+48
+212
+52
+52
+211
+51
+51
+225
+67
+64
+227
+74
+69
+233
+82
+75
+234
+83
+76
+225
+74
+65
+217
+63
+55
+216
+57
+51
+219
+56
+49
+227
+51
+51
+243
+46
+55
+255
+48
+62
+255
+48
+61
+250
+42
+55
+252
+46
+58
+255
+59
+69
+255
+67
+72
+251
+65
+66
+227
+49
+47
+223
+52
+45
+221
+52
+45
+221
+53
+44
+226
+52
+45
+230
+51
+44
+237
+52
+47
+241
+52
+48
+244
+48
+50
+247
+47
+50
+249
+46
+49
+248
+45
+48
+246
+46
+46
+241
+47
+45
+235
+50
+45
+227
+55
+45
+216
+58
+47
+205
+62
+48
+181
+49
+37
+177
+55
+44
+178
+59
+53
+233
+115
+113
+255
+138
+138
+255
+135
+141
+255
+116
+132
+253
+104
+124
+243
+97
+116
+241
+92
+112
+244
+82
+106
+245
+68
+97
+251
+55
+93
+252
+56
+94
+245
+61
+95
+232
+78
+102
+188
+81
+91
+125
+57
+54
+94
+60
+48
+81
+68
+49
+91
+86
+64
+93
+100
+69
+101
+119
+77
+106
+133
+82
+114
+142
+91
+118
+148
+94
+121
+154
+97
+123
+158
+100
+120
+158
+97
+115
+155
+93
+112
+152
+89
+112
+153
+87
+113
+154
+88
+113
+154
+88
+116
+155
+92
+117
+156
+93
+121
+157
+95
+120
+159
+96
+120
+161
+95
+121
+162
+94
+122
+165
+94
+121
+164
+92
+120
+164
+89
+120
+164
+87
+121
+165
+86
+123
+167
+88
+127
+169
+95
+130
+172
+100
+132
+171
+104
+134
+168
+108
+135
+165
+111
+134
+162
+113
+128
+154
+109
+120
+145
+106
+112
+132
+104
+108
+128
+101
+101
+121
+96
+95
+80
+61
+95
+80
+61
+95
+80
+61
+95
+80
+61
+95
+80
+61
+95
+80
+61
+95
+80
+61
+95
+80
+61
+94
+79
+60
+94
+79
+60
+94
+79
+60
+94
+79
+60
+94
+79
+60
+94
+79
+60
+94
+79
+60
+95
+78
+58
+99
+81
+57
+99
+81
+57
+97
+80
+60
+93
+80
+64
+90
+80
+71
+92
+84
+82
+95
+90
+97
+97
+95
+109
+116
+114
+138
+121
+120
+152
+129
+128
+168
+131
+129
+176
+126
+126
+176
+121
+121
+175
+121
+117
+176
+119
+119
+181
+119
+124
+190
+120
+127
+195
+125
+133
+196
+130
+136
+196
+133
+138
+193
+141
+143
+191
+151
+150
+190
+160
+157
+188
+172
+167
+187
+182
+172
+180
+190
+179
+175
+200
+184
+169
+208
+190
+166
+214
+193
+162
+209
+187
+150
+208
+172
+136
+175
+111
+84
+174
+92
+71
+164
+71
+53
+168
+62
+48
+194
+71
+63
+224
+87
+81
+239
+87
+86
+241
+78
+79
+233
+64
+67
+234
+61
+63
+230
+60
+61
+226
+61
+59
+223
+61
+58
+215
+61
+53
+207
+59
+49
+201
+57
+48
+193
+56
+48
+193
+60
+53
+185
+58
+51
+184
+61
+53
+193
+79
+69
+199
+88
+77
+199
+93
+79
+209
+101
+88
+211
+99
+85
+194
+76
+62
+188
+58
+45
+197
+56
+46
+210
+57
+49
+215
+52
+45
+223
+50
+44
+231
+54
+48
+230
+52
+48
+225
+50
+45
+224
+53
+46
+227
+60
+51
+231
+67
+55
+230
+67
+52
+226
+58
+45
+223
+51
+37
+233
+52
+43
+229
+45
+37
+240
+48
+45
+240
+48
+45
+241
+52
+50
+242
+54
+53
+232
+46
+47
+226
+50
+52
+231
+66
+70
+247
+88
+93
+246
+87
+92
+255
+111
+117
+229
+68
+74
+235
+72
+77
+224
+60
+67
+254
+91
+96
+255
+109
+115
+220
+59
+64
+255
+123
+128
+255
+108
+112
+234
+81
+84
+211
+61
+63
+198
+48
+50
+215
+59
+62
+241
+72
+75
+235
+59
+62
+237
+56
+63
+246
+62
+70
+240
+56
+66
+230
+46
+56
+241
+64
+74
+255
+95
+103
+255
+110
+119
+255
+107
+114
+254
+100
+110
+245
+94
+103
+247
+95
+107
+253
+99
+111
+253
+95
+110
+246
+90
+101
+241
+93
+93
+227
+80
+73
+226
+74
+71
+213
+55
+52
+210
+47
+48
+217
+53
+52
+210
+48
+46
+216
+57
+53
+223
+68
+63
+227
+74
+68
+226
+73
+65
+217
+64
+56
+211
+54
+47
+214
+52
+47
+220
+55
+49
+232
+54
+54
+234
+39
+47
+252
+48
+60
+254
+50
+61
+247
+43
+54
+249
+48
+58
+255
+62
+69
+253
+63
+65
+236
+52
+52
+226
+51
+46
+224
+53
+46
+222
+54
+45
+223
+52
+44
+225
+51
+42
+232
+51
+44
+239
+52
+47
+244
+52
+49
+246
+48
+49
+247
+47
+50
+249
+46
+49
+248
+45
+48
+248
+46
+46
+242
+47
+45
+235
+50
+45
+227
+55
+45
+215
+57
+46
+209
+63
+50
+182
+48
+37
+178
+54
+44
+176
+54
+49
+232
+112
+111
+255
+135
+136
+255
+134
+142
+255
+110
+128
+252
+99
+120
+241
+94
+113
+242
+90
+111
+245
+81
+106
+246
+67
+97
+253
+57
+95
+253
+59
+96
+242
+67
+98
+225
+84
+103
+174
+82
+87
+98
+48
+39
+89
+68
+51
+74
+69
+47
+85
+83
+60
+88
+93
+63
+99
+115
+76
+105
+129
+81
+113
+139
+91
+118
+146
+95
+122
+152
+98
+124
+157
+100
+120
+156
+95
+114
+153
+90
+110
+151
+85
+110
+151
+85
+110
+151
+85
+111
+152
+86
+114
+153
+90
+116
+155
+92
+119
+155
+93
+119
+158
+93
+119
+158
+91
+120
+161
+91
+121
+163
+91
+119
+163
+88
+118
+162
+87
+118
+162
+85
+119
+163
+84
+121
+165
+88
+122
+164
+90
+126
+166
+95
+129
+166
+99
+127
+161
+100
+126
+156
+102
+123
+151
+102
+114
+140
+93
+105
+130
+88
+95
+117
+81
+92
+113
+82
+86
+107
+76
+92
+76
+60
+94
+78
+62
+96
+80
+64
+96
+80
+64
+95
+79
+63
+95
+79
+63
+95
+79
+63
+97
+81
+65
+98
+82
+66
+95
+79
+63
+93
+77
+61
+93
+77
+61
+97
+81
+65
+99
+83
+67
+98
+82
+66
+96
+81
+62
+100
+83
+63
+97
+80
+62
+93
+80
+64
+94
+81
+73
+91
+81
+80
+90
+83
+90
+101
+97
+112
+115
+113
+137
+121
+120
+154
+122
+124
+165
+126
+128
+177
+128
+129
+185
+125
+127
+186
+120
+122
+183
+114
+115
+180
+108
+111
+182
+116
+119
+198
+118
+124
+202
+128
+131
+202
+139
+141
+198
+150
+151
+195
+164
+164
+190
+178
+176
+187
+188
+185
+180
+203
+197
+181
+211
+204
+176
+217
+207
+172
+219
+207
+165
+220
+207
+163
+221
+209
+161
+217
+203
+156
+217
+194
+152
+209
+168
+136
+184
+128
+103
+161
+93
+70
+203
+122
+103
+216
+116
+101
+189
+72
+63
+216
+81
+78
+247
+99
+99
+233
+75
+76
+229
+63
+65
+225
+57
+57
+227
+59
+58
+226
+58
+57
+219
+55
+53
+216
+54
+49
+214
+59
+54
+203
+56
+49
+192
+53
+46
+199
+66
+59
+187
+60
+51
+191
+73
+63
+198
+88
+75
+185
+79
+65
+206
+100
+86
+209
+99
+84
+204
+88
+73
+197
+71
+57
+196
+58
+47
+205
+54
+45
+216
+55
+47
+225
+54
+47
+227
+52
+47
+223
+48
+45
+223
+50
+44
+224
+55
+48
+228
+61
+52
+224
+60
+48
+221
+55
+41
+223
+53
+40
+229
+55
+44
+228
+47
+36
+234
+47
+38
+236
+47
+41
+238
+49
+45
+238
+50
+48
+235
+52
+48
+232
+53
+49
+226
+54
+52
+215
+55
+57
+230
+74
+78
+245
+89
+93
+237
+78
+83
+215
+56
+61
+215
+54
+60
+249
+88
+96
+255
+126
+132
+255
+120
+128
+255
+107
+113
+255
+99
+107
+255
+102
+109
+255
+101
+107
+245
+92
+97
+242
+89
+92
+252
+91
+96
+255
+87
+90
+255
+70
+75
+249
+58
+66
+248
+57
+65
+243
+51
+62
+235
+45
+57
+234
+50
+62
+238
+62
+72
+252
+85
+95
+255
+97
+105
+255
+104
+114
+254
+103
+112
+251
+100
+109
+254
+100
+110
+255
+97
+111
+251
+94
+103
+237
+83
+83
+223
+70
+64
+214
+56
+53
+214
+52
+49
+215
+49
+49
+215
+47
+46
+216
+51
+49
+219
+57
+52
+225
+68
+61
+220
+66
+58
+217
+63
+55
+214
+60
+52
+215
+57
+48
+219
+56
+49
+224
+57
+51
+230
+54
+54
+240
+55
+60
+243
+52
+59
+243
+52
+59
+246
+52
+60
+245
+54
+59
+242
+53
+57
+235
+51
+51
+227
+49
+47
+222
+51
+44
+222
+53
+46
+223
+55
+46
+224
+53
+43
+228
+51
+43
+233
+50
+44
+239
+50
+44
+245
+50
+48
+247
+49
+50
+248
+48
+51
+250
+47
+50
+249
+46
+49
+249
+47
+47
+243
+48
+46
+236
+51
+46
+229
+55
+46
+224
+63
+53
+204
+56
+44
+191
+54
+44
+175
+47
+38
+184
+59
+55
+210
+88
+87
+255
+152
+154
+254
+123
+131
+255
+109
+128
+255
+102
+124
+246
+93
+114
+239
+81
+104
+241
+72
+101
+249
+68
+101
+253
+61
+100
+245
+59
+96
+242
+79
+108
+209
+84
+100
+137
+61
+63
+80
+44
+32
+69
+58
+38
+68
+70
+46
+77
+77
+53
+90
+94
+67
+91
+105
+69
+99
+120
+77
+113
+136
+90
+120
+146
+98
+120
+150
+96
+116
+149
+92
+114
+150
+89
+113
+152
+89
+108
+149
+83
+109
+150
+82
+110
+151
+83
+111
+152
+84
+114
+153
+88
+116
+155
+90
+117
+156
+93
+117
+156
+91
+116
+155
+88
+116
+157
+87
+118
+160
+88
+119
+161
+87
+118
+162
+87
+118
+162
+85
+117
+161
+84
+116
+160
+83
+123
+165
+91
+123
+163
+93
+122
+158
+94
+117
+151
+91
+109
+139
+85
+98
+126
+77
+88
+114
+67
+83
+106
+62
+63
+85
+46
+63
+85
+47
+62
+84
+46
+91
+75
+59
+94
+78
+62
+96
+80
+64
+96
+80
+64
+96
+80
+64
+95
+79
+63
+96
+80
+64
+97
+81
+65
+98
+82
+66
+96
+80
+64
+95
+79
+63
+96
+80
+64
+98
+82
+66
+99
+83
+67
+98
+82
+66
+96
+80
+64
+102
+86
+71
+95
+81
+70
+92
+79
+71
+94
+84
+83
+97
+90
+97
+100
+96
+111
+109
+107
+131
+118
+119
+150
+119
+121
+162
+123
+125
+174
+125
+127
+184
+120
+124
+185
+113
+117
+181
+107
+112
+180
+108
+111
+182
+110
+113
+190
+117
+119
+206
+124
+126
+211
+137
+137
+209
+152
+152
+206
+168
+167
+199
+184
+182
+193
+201
+197
+186
+211
+206
+177
+219
+214
+172
+226
+219
+167
+231
+222
+167
+230
+221
+164
+228
+219
+164
+226
+216
+163
+219
+209
+158
+212
+199
+154
+212
+188
+154
+189
+155
+128
+170
+124
+100
+199
+138
+119
+202
+125
+109
+182
+86
+74
+211
+96
+91
+246
+114
+112
+236
+90
+91
+231
+75
+76
+226
+63
+64
+228
+62
+62
+233
+63
+64
+229
+59
+59
+224
+54
+54
+219
+54
+52
+214
+61
+56
+201
+56
+51
+202
+63
+56
+185
+54
+46
+184
+62
+51
+189
+75
+64
+182
+72
+59
+200
+93
+77
+221
+111
+96
+212
+96
+81
+198
+72
+58
+189
+53
+41
+196
+48
+38
+212
+54
+45
+220
+53
+45
+219
+48
+41
+226
+53
+49
+229
+57
+53
+228
+61
+55
+224
+60
+51
+220
+56
+46
+219
+53
+41
+223
+52
+42
+227
+53
+42
+236
+55
+46
+237
+53
+43
+237
+50
+43
+235
+48
+43
+231
+48
+44
+227
+50
+44
+225
+52
+46
+221
+53
+50
+214
+56
+55
+216
+62
+64
+228
+74
+76
+243
+87
+91
+250
+94
+98
+252
+92
+100
+254
+93
+101
+255
+97
+105
+240
+79
+87
+235
+74
+82
+238
+78
+86
+252
+92
+100
+255
+104
+111
+255
+101
+107
+244
+89
+95
+242
+79
+84
+236
+53
+58
+239
+45
+53
+241
+44
+54
+244
+47
+57
+238
+40
+53
+228
+34
+45
+227
+41
+54
+234
+57
+67
+251
+81
+90
+253
+92
+100
+255
+100
+108
+255
+101
+109
+255
+102
+110
+255
+101
+109
+252
+92
+104
+242
+82
+90
+229
+69
+69
+222
+60
+55
+219
+54
+52
+222
+54
+51
+223
+53
+53
+220
+51
+48
+218
+50
+47
+219
+54
+50
+224
+62
+57
+219
+62
+55
+216
+59
+52
+215
+58
+51
+219
+56
+49
+223
+56
+50
+229
+57
+53
+231
+58
+54
+233
+57
+59
+234
+55
+58
+235
+55
+58
+238
+55
+57
+238
+55
+57
+236
+54
+53
+229
+51
+49
+223
+50
+44
+220
+51
+44
+221
+54
+45
+223
+55
+44
+226
+54
+44
+229
+50
+43
+234
+49
+44
+242
+49
+44
+245
+50
+48
+247
+49
+50
+247
+48
+51
+250
+47
+50
+249
+46
+49
+247
+47
+47
+243
+48
+46
+236
+51
+46
+229
+55
+46
+223
+60
+51
+212
+61
+50
+194
+56
+46
+182
+49
+42
+183
+55
+52
+216
+90
+91
+255
+144
+147
+251
+115
+125
+254
+103
+122
+254
+94
+118
+247
+87
+111
+244
+80
+105
+246
+71
+102
+246
+65
+98
+250
+61
+99
+241
+66
+99
+227
+81
+104
+183
+76
+86
+119
+60
+56
+76
+50
+35
+62
+57
+35
+61
+65
+40
+71
+71
+47
+80
+83
+56
+88
+99
+65
+96
+114
+74
+110
+131
+88
+117
+143
+95
+118
+147
+93
+116
+147
+88
+113
+147
+86
+112
+148
+84
+107
+146
+79
+107
+148
+80
+108
+149
+81
+109
+150
+82
+112
+151
+86
+114
+153
+88
+115
+154
+91
+115
+154
+89
+116
+155
+88
+117
+157
+87
+117
+159
+87
+117
+159
+87
+116
+158
+84
+114
+158
+81
+113
+157
+82
+112
+156
+81
+110
+152
+80
+108
+148
+78
+104
+140
+76
+98
+129
+70
+88
+117
+63
+78
+105
+54
+70
+93
+47
+64
+87
+43
+64
+87
+45
+64
+87
+45
+64
+87
+45
+89
+76
+60
+91
+78
+62
+94
+81
+65
+94
+81
+65
+94
+81
+65
+94
+81
+65
+95
+82
+66
+96
+83
+67
+97
+84
+68
+96
+83
+67
+95
+82
+66
+96
+83
+67
+97
+84
+68
+97
+84
+68
+96
+83
+67
+94
+80
+67
+98
+85
+77
+92
+81
+77
+91
+81
+82
+99
+89
+98
+107
+100
+116
+113
+109
+132
+118
+117
+149
+121
+123
+164
+121
+123
+172
+121
+126
+182
+120
+124
+187
+110
+115
+181
+101
+105
+176
+96
+103
+175
+106
+110
+184
+114
+117
+196
+125
+125
+213
+135
+133
+217
+151
+148
+217
+169
+167
+216
+187
+185
+209
+203
+201
+202
+220
+215
+193
+229
+224
+184
+233
+228
+173
+237
+231
+169
+240
+232
+167
+237
+229
+166
+231
+225
+167
+226
+219
+165
+215
+207
+160
+203
+196
+154
+185
+174
+144
+170
+154
+129
+156
+130
+107
+171
+130
+112
+168
+110
+96
+158
+81
+71
+187
+93
+85
+222
+109
+105
+247
+117
+117
+238
+96
+95
+227
+74
+76
+226
+66
+68
+234
+65
+68
+235
+62
+64
+231
+57
+58
+224
+54
+54
+223
+61
+58
+212
+59
+54
+212
+65
+58
+194
+55
+48
+183
+55
+44
+183
+62
+51
+174
+61
+47
+182
+70
+56
+219
+106
+92
+223
+105
+91
+217
+91
+77
+202
+66
+54
+197
+50
+40
+209
+52
+43
+217
+54
+45
+217
+50
+44
+222
+53
+50
+233
+65
+62
+236
+71
+67
+224
+61
+54
+213
+50
+41
+213
+49
+39
+218
+50
+39
+222
+48
+37
+230
+52
+42
+232
+49
+41
+231
+46
+41
+230
+47
+41
+227
+50
+44
+226
+55
+47
+225
+61
+52
+224
+66
+57
+198
+45
+40
+202
+52
+51
+220
+68
+67
+240
+86
+88
+250
+94
+98
+247
+90
+97
+243
+83
+91
+241
+81
+91
+231
+69
+80
+232
+70
+81
+237
+77
+87
+251
+91
+101
+255
+107
+116
+255
+109
+115
+242
+87
+93
+225
+60
+66
+232
+47
+53
+242
+45
+52
+250
+50
+60
+251
+51
+62
+244
+44
+57
+236
+40
+52
+243
+55
+69
+255
+76
+87
+245
+74
+83
+244
+80
+87
+247
+87
+95
+252
+95
+102
+255
+100
+107
+255
+97
+105
+246
+82
+89
+232
+67
+73
+222
+57
+55
+222
+55
+49
+227
+55
+53
+233
+60
+56
+235
+59
+59
+230
+57
+53
+225
+53
+49
+221
+54
+48
+221
+58
+51
+217
+59
+50
+215
+57
+48
+215
+57
+48
+220
+55
+49
+225
+56
+51
+231
+58
+54
+233
+60
+56
+227
+57
+57
+227
+57
+57
+229
+57
+55
+231
+57
+56
+232
+56
+56
+230
+55
+52
+225
+52
+48
+219
+50
+43
+218
+54
+45
+219
+55
+45
+222
+56
+44
+226
+54
+44
+231
+50
+41
+235
+48
+41
+243
+48
+44
+247
+49
+48
+245
+49
+50
+245
+49
+51
+248
+48
+50
+247
+47
+49
+247
+47
+47
+242
+48
+46
+238
+51
+46
+231
+54
+46
+221
+57
+48
+220
+68
+57
+199
+56
+48
+187
+52
+46
+181
+47
+46
+228
+95
+98
+255
+131
+136
+248
+108
+119
+252
+99
+120
+251
+88
+115
+248
+81
+109
+251
+78
+108
+250
+69
+102
+243
+59
+93
+239
+61
+95
+233
+74
+102
+210
+85
+103
+155
+68
+74
+107
+60
+52
+79
+62
+44
+62
+60
+39
+59
+63
+40
+70
+68
+47
+72
+72
+48
+81
+92
+60
+89
+107
+69
+103
+124
+81
+114
+137
+91
+116
+143
+90
+113
+144
+85
+109
+143
+82
+107
+143
+79
+105
+144
+77
+105
+145
+75
+105
+146
+76
+107
+148
+80
+109
+150
+84
+110
+151
+85
+112
+151
+88
+113
+152
+87
+117
+156
+89
+117
+157
+87
+116
+156
+85
+114
+156
+84
+112
+154
+82
+109
+151
+77
+107
+149
+77
+106
+148
+76
+101
+141
+71
+97
+136
+69
+91
+127
+65
+85
+116
+59
+76
+105
+51
+69
+96
+45
+65
+88
+42
+62
+85
+39
+67
+93
+48
+68
+94
+49
+69
+95
+50
+87
+74
+58
+90
+77
+61
+92
+79
+63
+94
+81
+65
+93
+80
+64
+94
+81
+65
+95
+82
+66
+97
+84
+68
+96
+83
+67
+96
+83
+67
+96
+83
+67
+97
+84
+68
+97
+84
+68
+96
+83
+67
+95
+82
+66
+92
+80
+68
+90
+79
+77
+90
+81
+86
+98
+88
+99
+106
+99
+115
+113
+109
+134
+118
+117
+149
+120
+122
+163
+122
+124
+173
+119
+124
+180
+115
+121
+183
+109
+114
+180
+98
+105
+175
+93
+100
+172
+97
+103
+177
+108
+114
+190
+120
+123
+202
+137
+138
+221
+149
+146
+225
+164
+162
+225
+182
+181
+225
+199
+196
+217
+213
+209
+208
+225
+220
+198
+231
+227
+189
+235
+229
+179
+238
+233
+175
+238
+232
+174
+233
+226
+171
+227
+219
+170
+218
+211
+167
+203
+195
+158
+188
+182
+150
+166
+164
+139
+157
+152
+132
+150
+134
+118
+155
+127
+113
+155
+113
+99
+156
+98
+87
+181
+104
+96
+208
+113
+109
+251
+139
+137
+243
+118
+116
+232
+92
+93
+229
+76
+78
+229
+69
+71
+234
+65
+68
+234
+61
+63
+232
+60
+60
+223
+58
+56
+219
+60
+56
+222
+69
+63
+211
+67
+59
+195
+58
+48
+186
+58
+47
+176
+54
+41
+167
+49
+35
+191
+73
+59
+219
+97
+82
+234
+107
+92
+219
+83
+69
+201
+58
+44
+204
+52
+39
+212
+54
+43
+215
+52
+45
+217
+52
+50
+241
+77
+75
+254
+90
+88
+237
+75
+70
+217
+56
+48
+214
+51
+42
+219
+52
+43
+222
+50
+40
+223
+46
+38
+225
+44
+37
+225
+44
+37
+222
+45
+37
+220
+49
+41
+218
+54
+44
+217
+59
+48
+215
+63
+52
+194
+47
+39
+196
+52
+44
+206
+58
+54
+217
+67
+66
+223
+70
+72
+224
+69
+73
+228
+71
+78
+234
+77
+86
+241
+81
+93
+246
+86
+98
+247
+87
+97
+248
+91
+100
+255
+102
+111
+255
+107
+115
+241
+86
+94
+219
+56
+61
+233
+50
+55
+240
+47
+52
+241
+46
+54
+240
+43
+52
+235
+37
+50
+235
+41
+52
+249
+62
+73
+255
+83
+95
+237
+63
+73
+232
+65
+73
+234
+71
+76
+242
+81
+86
+255
+90
+96
+255
+88
+93
+244
+71
+77
+227
+54
+56
+225
+53
+51
+228
+55
+51
+234
+59
+56
+242
+64
+62
+244
+64
+63
+239
+61
+59
+230
+57
+53
+224
+55
+50
+221
+56
+50
+218
+57
+49
+217
+56
+48
+217
+56
+48
+220
+55
+49
+227
+55
+51
+232
+57
+54
+233
+58
+55
+226
+58
+55
+224
+59
+57
+227
+58
+55
+230
+58
+56
+231
+58
+54
+229
+56
+52
+224
+53
+46
+218
+51
+43
+218
+54
+44
+219
+55
+45
+222
+56
+44
+226
+54
+44
+231
+50
+41
+235
+48
+41
+242
+47
+43
+246
+48
+47
+244
+50
+50
+244
+50
+51
+247
+49
+50
+246
+48
+49
+246
+48
+47
+242
+48
+46
+238
+51
+46
+231
+54
+46
+220
+56
+47
+224
+70
+60
+201
+57
+49
+190
+51
+46
+182
+44
+44
+238
+102
+106
+255
+121
+128
+248
+103
+116
+253
+100
+121
+250
+86
+113
+251
+76
+107
+255
+72
+106
+252
+64
+99
+239
+55
+89
+232
+63
+94
+224
+82
+104
+195
+89
+101
+135
+67
+66
+101
+67
+55
+90
+79
+59
+72
+70
+49
+65
+67
+45
+76
+71
+51
+70
+68
+45
+76
+85
+54
+83
+99
+62
+98
+116
+76
+108
+131
+85
+112
+139
+88
+110
+141
+82
+107
+141
+80
+105
+142
+75
+103
+143
+73
+104
+144
+74
+104
+145
+75
+106
+147
+77
+107
+148
+80
+109
+150
+84
+111
+150
+87
+112
+151
+86
+116
+155
+88
+115
+155
+85
+113
+153
+83
+111
+151
+80
+106
+147
+77
+103
+144
+74
+101
+142
+72
+100
+141
+71
+96
+135
+68
+93
+129
+65
+87
+121
+61
+82
+113
+56
+77
+105
+54
+76
+102
+54
+78
+101
+55
+79
+102
+56
+77
+103
+56
+78
+104
+56
+79
+105
+58
+85
+72
+56
+87
+74
+58
+91
+78
+62
+92
+79
+63
+93
+80
+64
+93
+80
+64
+95
+82
+66
+97
+84
+68
+95
+82
+66
+96
+83
+67
+97
+84
+68
+97
+84
+68
+96
+83
+67
+95
+82
+66
+95
+82
+66
+94
+81
+73
+86
+77
+82
+95
+88
+104
+110
+102
+123
+116
+112
+137
+120
+116
+151
+120
+119
+161
+120
+122
+171
+121
+123
+180
+115
+121
+183
+106
+114
+179
+96
+103
+173
+91
+99
+171
+95
+103
+176
+106
+114
+187
+118
+124
+198
+128
+132
+206
+147
+149
+223
+158
+159
+224
+173
+174
+228
+187
+189
+228
+203
+201
+225
+212
+211
+217
+221
+218
+209
+225
+223
+202
+229
+224
+194
+230
+226
+191
+228
+222
+188
+224
+215
+182
+218
+208
+181
+206
+198
+175
+190
+182
+163
+174
+167
+151
+155
+153
+140
+143
+141
+128
+140
+132
+121
+141
+123
+113
+147
+117
+107
+157
+114
+105
+169
+109
+101
+188
+111
+105
+230
+137
+132
+237
+129
+126
+240
+116
+114
+240
+102
+100
+238
+88
+89
+237
+79
+78
+235
+69
+69
+233
+65
+64
+227
+58
+55
+224
+59
+55
+228
+66
+61
+222
+69
+63
+204
+60
+51
+198
+61
+51
+196
+66
+53
+175
+49
+35
+174
+48
+34
+199
+73
+59
+220
+88
+75
+214
+78
+64
+204
+61
+47
+206
+56
+42
+208
+54
+42
+209
+51
+42
+214
+52
+50
+245
+85
+85
+255
+107
+104
+250
+93
+88
+227
+68
+62
+220
+59
+51
+223
+59
+50
+227
+56
+48
+226
+52
+45
+227
+50
+44
+226
+49
+43
+221
+48
+41
+212
+48
+39
+205
+47
+36
+198
+47
+36
+194
+48
+35
+197
+57
+44
+192
+52
+39
+193
+51
+41
+203
+58
+53
+215
+67
+65
+219
+69
+71
+219
+66
+71
+218
+64
+72
+225
+69
+80
+236
+80
+91
+242
+86
+97
+242
+86
+97
+249
+93
+104
+255
+101
+109
+241
+87
+95
+222
+63
+68
+233
+59
+60
+237
+53
+55
+237
+51
+56
+239
+50
+56
+242
+50
+61
+247
+57
+67
+255
+72
+83
+255
+86
+95
+229
+53
+63
+222
+51
+59
+223
+54
+59
+234
+65
+68
+249
+74
+79
+253
+72
+77
+244
+59
+65
+233
+49
+51
+232
+53
+49
+235
+57
+53
+239
+60
+56
+242
+60
+57
+243
+59
+57
+240
+58
+55
+233
+55
+51
+226
+55
+48
+223
+59
+50
+220
+59
+49
+219
+58
+48
+220
+57
+48
+223
+56
+50
+228
+55
+51
+232
+54
+52
+233
+55
+53
+230
+58
+56
+228
+59
+56
+230
+58
+56
+232
+58
+57
+232
+59
+55
+230
+57
+53
+225
+54
+47
+220
+51
+44
+219
+55
+45
+220
+56
+46
+223
+57
+45
+225
+55
+42
+229
+51
+41
+233
+49
+41
+241
+48
+41
+244
+49
+45
+243
+51
+50
+241
+51
+51
+244
+50
+50
+244
+48
+49
+244
+49
+47
+242
+48
+46
+238
+51
+46
+231
+54
+46
+222
+55
+47
+224
+67
+58
+202
+55
+48
+192
+49
+45
+192
+49
+51
+247
+106
+112
+255
+113
+122
+249
+103
+116
+248
+95
+116
+246
+82
+109
+252
+68
+102
+255
+63
+100
+255
+59
+99
+242
+58
+94
+228
+71
+100
+216
+91
+109
+171
+86
+91
+119
+69
+62
+100
+74
+61
+97
+89
+70
+84
+79
+59
+75
+73
+52
+80
+73
+54
+71
+69
+46
+71
+80
+51
+76
+92
+56
+90
+108
+70
+102
+124
+78
+109
+133
+83
+109
+138
+82
+108
+140
+77
+104
+141
+74
+102
+142
+72
+103
+143
+72
+103
+145
+73
+105
+146
+76
+106
+147
+79
+108
+149
+83
+110
+149
+86
+111
+150
+85
+116
+153
+86
+115
+152
+85
+110
+149
+82
+106
+146
+76
+102
+143
+75
+99
+140
+72
+97
+138
+70
+95
+136
+70
+90
+129
+66
+88
+124
+63
+83
+116
+59
+80
+110
+56
+79
+107
+58
+82
+108
+61
+87
+110
+64
+90
+113
+67
+85
+111
+63
+85
+112
+61
+85
+111
+63
+82
+69
+53
+85
+72
+56
+88
+75
+59
+90
+77
+61
+91
+78
+62
+92
+79
+63
+94
+81
+65
+96
+83
+67
+96
+83
+67
+97
+84
+68
+97
+84
+68
+97
+84
+68
+96
+83
+67
+96
+83
+67
+98
+85
+69
+97
+86
+80
+94
+86
+99
+106
+101
+124
+121
+117
+144
+125
+121
+154
+122
+121
+161
+120
+121
+169
+118
+121
+176
+115
+119
+180
+106
+114
+179
+99
+106
+176
+91
+99
+171
+93
+101
+174
+104
+112
+185
+118
+126
+199
+129
+135
+209
+136
+141
+209
+153
+157
+220
+163
+166
+221
+175
+179
+226
+187
+191
+228
+198
+199
+227
+207
+206
+224
+212
+211
+219
+215
+213
+214
+217
+214
+209
+217
+213
+204
+215
+208
+198
+210
+201
+192
+204
+195
+190
+197
+186
+184
+180
+168
+168
+163
+155
+153
+141
+137
+134
+124
+121
+116
+124
+116
+113
+120
+107
+101
+130
+107
+101
+143
+110
+103
+144
+97
+91
+157
+96
+91
+192
+115
+109
+215
+122
+117
+237
+128
+123
+249
+126
+121
+253
+115
+112
+250
+100
+99
+243
+85
+84
+237
+73
+71
+237
+68
+63
+234
+62
+58
+225
+60
+54
+224
+65
+59
+209
+58
+49
+211
+67
+58
+221
+84
+74
+194
+62
+50
+184
+54
+41
+189
+57
+44
+194
+61
+46
+200
+63
+47
+207
+66
+49
+215
+67
+53
+214
+64
+49
+209
+55
+45
+208
+50
+47
+234
+76
+77
+250
+95
+93
+242
+87
+83
+223
+68
+63
+217
+58
+52
+219
+56
+49
+224
+55
+48
+230
+57
+51
+231
+57
+50
+231
+57
+50
+226
+58
+49
+218
+57
+47
+209
+57
+44
+202
+56
+43
+196
+56
+41
+176
+40
+24
+184
+51
+34
+200
+64
+50
+211
+73
+62
+210
+68
+64
+203
+59
+58
+204
+55
+59
+207
+58
+64
+211
+57
+67
+227
+73
+83
+237
+86
+95
+240
+89
+98
+244
+93
+102
+246
+95
+104
+232
+83
+89
+218
+63
+67
+229
+64
+62
+236
+63
+59
+243
+64
+67
+253
+70
+74
+255
+76
+84
+255
+81
+89
+255
+84
+93
+255
+85
+94
+226
+51
+58
+221
+46
+53
+221
+46
+51
+231
+55
+58
+245
+60
+65
+249
+58
+63
+248
+52
+56
+244
+48
+50
+237
+52
+50
+239
+57
+53
+240
+56
+54
+237
+52
+50
+235
+50
+48
+234
+50
+48
+231
+52
+48
+225
+52
+46
+227
+60
+52
+224
+61
+52
+223
+60
+51
+222
+59
+50
+225
+56
+51
+228
+55
+51
+232
+52
+51
+232
+52
+51
+232
+56
+56
+231
+57
+56
+232
+56
+56
+235
+57
+57
+235
+57
+55
+233
+55
+53
+226
+53
+47
+222
+51
+44
+219
+55
+45
+220
+56
+44
+221
+58
+43
+223
+55
+42
+227
+50
+40
+231
+48
+40
+239
+48
+40
+242
+49
+44
+241
+52
+50
+240
+52
+51
+243
+51
+50
+243
+49
+49
+243
+49
+47
+241
+49
+46
+236
+51
+46
+231
+54
+46
+224
+57
+49
+217
+60
+51
+204
+55
+49
+193
+48
+45
+209
+64
+67
+255
+110
+117
+253
+107
+117
+247
+99
+113
+237
+84
+105
+241
+74
+102
+250
+62
+97
+255
+55
+94
+255
+55
+98
+248
+64
+100
+227
+79
+105
+200
+92
+105
+139
+71
+70
+106
+70
+58
+93
+76
+60
+93
+86
+67
+88
+81
+62
+81
+74
+55
+79
+71
+52
+73
+68
+46
+68
+74
+46
+71
+85
+50
+83
+99
+62
+94
+115
+72
+103
+127
+77
+106
+135
+79
+106
+138
+75
+103
+140
+71
+103
+140
+70
+102
+142
+71
+102
+144
+72
+103
+144
+74
+105
+146
+78
+107
+148
+82
+109
+148
+85
+109
+148
+85
+113
+149
+85
+111
+148
+81
+106
+145
+78
+103
+142
+75
+99
+140
+72
+96
+137
+69
+95
+136
+70
+94
+134
+71
+92
+130
+69
+91
+126
+68
+87
+120
+65
+86
+114
+63
+85
+111
+64
+89
+112
+66
+93
+114
+71
+94
+117
+71
+90
+114
+66
+88
+115
+64
+88
+115
+64
+78
+66
+50
+81
+69
+53
+85
+73
+57
+87
+75
+59
+88
+76
+60
+90
+78
+62
+92
+80
+64
+94
+82
+66
+97
+85
+69
+98
+86
+70
+98
+86
+70
+97
+85
+69
+95
+83
+67
+97
+85
+69
+102
+90
+74
+104
+93
+89
+110
+103
+119
+117
+112
+142
+124
+120
+153
+123
+121
+160
+119
+120
+166
+118
+119
+173
+112
+117
+175
+106
+111
+175
+97
+104
+172
+94
+102
+174
+95
+103
+176
+101
+109
+182
+112
+120
+192
+125
+133
+205
+137
+144
+216
+143
+151
+214
+153
+161
+210
+161
+168
+210
+170
+178
+217
+180
+186
+222
+186
+191
+223
+192
+193
+224
+195
+195
+223
+199
+197
+221
+198
+194
+217
+197
+192
+212
+193
+186
+204
+188
+179
+196
+187
+176
+193
+181
+168
+186
+166
+153
+170
+150
+139
+153
+139
+132
+139
+117
+111
+113
+119
+110
+111
+115
+101
+101
+122
+102
+101
+137
+109
+106
+133
+94
+89
+150
+99
+95
+155
+90
+84
+183
+103
+96
+214
+117
+110
+237
+124
+118
+252
+125
+119
+255
+120
+115
+254
+106
+102
+249
+92
+87
+252
+83
+78
+245
+72
+66
+230
+61
+54
+231
+68
+61
+216
+59
+52
+219
+71
+61
+234
+92
+82
+197
+59
+48
+196
+60
+48
+189
+55
+43
+190
+54
+40
+199
+62
+46
+209
+68
+51
+212
+66
+51
+212
+65
+49
+215
+65
+51
+210
+56
+54
+216
+62
+62
+221
+67
+67
+220
+66
+64
+214
+61
+55
+213
+56
+49
+216
+55
+47
+222
+55
+47
+229
+58
+51
+230
+57
+51
+229
+58
+51
+226
+59
+51
+219
+62
+53
+213
+65
+53
+209
+69
+56
+204
+71
+54
+174
+45
+24
+188
+59
+37
+205
+74
+56
+209
+76
+61
+198
+61
+53
+187
+48
+43
+192
+48
+48
+202
+57
+62
+215
+65
+74
+226
+76
+85
+236
+86
+97
+240
+90
+101
+239
+92
+100
+236
+89
+97
+223
+76
+82
+212
+62
+64
+209
+52
+47
+218
+53
+47
+227
+57
+57
+237
+63
+64
+245
+66
+72
+247
+68
+74
+244
+64
+73
+239
+62
+70
+228
+51
+59
+225
+48
+54
+230
+49
+54
+240
+55
+60
+247
+54
+57
+249
+49
+52
+254
+45
+50
+253
+49
+52
+239
+50
+48
+240
+57
+53
+240
+55
+52
+236
+48
+46
+232
+44
+42
+231
+48
+44
+230
+51
+46
+224
+51
+44
+228
+61
+53
+224
+61
+52
+224
+61
+52
+224
+60
+51
+227
+58
+53
+230
+57
+53
+234
+54
+53
+236
+54
+53
+236
+53
+55
+236
+53
+55
+237
+53
+55
+238
+54
+56
+238
+54
+54
+235
+53
+52
+228
+50
+46
+222
+49
+43
+222
+55
+46
+221
+57
+45
+221
+58
+43
+223
+55
+42
+225
+52
+38
+230
+49
+38
+237
+49
+40
+241
+49
+44
+240
+52
+50
+238
+53
+51
+241
+52
+50
+242
+50
+49
+243
+49
+47
+241
+49
+46
+236
+51
+46
+231
+54
+46
+226
+59
+51
+210
+52
+43
+210
+58
+53
+198
+50
+48
+231
+85
+88
+255
+112
+120
+249
+99
+110
+241
+90
+105
+227
+75
+96
+239
+72
+102
+253
+58
+98
+255
+49
+93
+255
+54
+98
+253
+67
+104
+219
+77
+101
+177
+80
+89
+106
+53
+47
+94
+71
+55
+88
+75
+58
+85
+78
+59
+89
+81
+62
+85
+74
+56
+76
+64
+48
+73
+68
+48
+64
+70
+44
+65
+79
+46
+75
+91
+54
+88
+106
+64
+98
+120
+71
+102
+129
+74
+104
+136
+73
+102
+139
+70
+101
+138
+68
+99
+139
+66
+99
+141
+69
+101
+142
+72
+103
+144
+76
+104
+145
+79
+105
+145
+82
+107
+146
+83
+110
+146
+82
+108
+144
+80
+104
+143
+78
+100
+139
+74
+97
+138
+72
+95
+136
+70
+95
+135
+72
+95
+135
+72
+95
+133
+72
+95
+130
+72
+93
+126
+71
+93
+121
+70
+93
+119
+72
+96
+119
+75
+99
+120
+79
+99
+122
+78
+92
+116
+66
+90
+117
+64
+90
+117
+64
+74
+67
+51
+77
+70
+54
+81
+72
+57
+84
+75
+60
+87
+75
+61
+89
+77
+63
+92
+79
+63
+94
+81
+65
+100
+87
+70
+101
+88
+71
+100
+88
+72
+98
+86
+70
+95
+85
+73
+97
+87
+77
+103
+94
+85
+108
+99
+102
+119
+114
+137
+121
+117
+154
+120
+118
+158
+116
+115
+159
+114
+114
+164
+116
+117
+173
+108
+112
+175
+98
+103
+169
+90
+97
+169
+95
+101
+175
+102
+108
+184
+109
+115
+191
+118
+124
+200
+129
+135
+211
+143
+147
+221
+151
+156
+222
+155
+161
+211
+160
+167
+209
+169
+174
+216
+174
+179
+221
+177
+180
+223
+178
+179
+223
+180
+179
+223
+182
+179
+222
+181
+176
+217
+179
+172
+213
+174
+166
+203
+171
+161
+196
+170
+159
+193
+164
+153
+185
+153
+140
+170
+136
+126
+150
+126
+120
+132
+102
+97
+103
+108
+99
+102
+100
+88
+90
+108
+90
+88
+124
+99
+95
+123
+86
+80
+147
+98
+93
+140
+77
+70
+162
+85
+77
+187
+97
+88
+212
+108
+99
+238
+121
+114
+255
+129
+122
+255
+124
+119
+255
+112
+106
+254
+97
+92
+247
+84
+79
+233
+71
+66
+238
+79
+73
+221
+66
+61
+222
+71
+64
+234
+87
+79
+186
+44
+34
+190
+49
+39
+190
+52
+39
+199
+62
+46
+209
+69
+54
+203
+62
+45
+193
+50
+34
+202
+55
+39
+219
+69
+55
+222
+69
+63
+211
+57
+55
+204
+51
+46
+205
+53
+48
+212
+59
+53
+215
+61
+53
+221
+60
+52
+225
+61
+52
+228
+59
+52
+228
+57
+50
+222
+53
+46
+215
+52
+43
+207
+53
+41
+202
+56
+43
+197
+60
+44
+194
+63
+45
+212
+83
+62
+200
+71
+50
+189
+60
+41
+190
+58
+45
+195
+61
+50
+196
+59
+53
+194
+55
+52
+194
+52
+51
+220
+75
+78
+221
+76
+81
+225
+80
+85
+229
+84
+89
+232
+89
+93
+229
+86
+88
+220
+77
+79
+212
+67
+64
+203
+52
+43
+212
+54
+43
+218
+53
+47
+224
+52
+50
+228
+49
+52
+232
+49
+54
+233
+48
+56
+231
+46
+54
+238
+51
+62
+237
+50
+59
+244
+52
+63
+253
+56
+66
+255
+51
+62
+253
+41
+53
+255
+40
+51
+255
+46
+57
+248
+45
+51
+249
+53
+55
+249
+53
+57
+240
+46
+47
+235
+42
+43
+233
+48
+46
+232
+53
+49
+226
+53
+47
+227
+60
+52
+224
+61
+52
+224
+61
+52
+225
+61
+52
+228
+59
+54
+231
+58
+54
+235
+55
+54
+238
+54
+54
+236
+52
+54
+235
+51
+53
+236
+50
+53
+237
+51
+52
+237
+53
+53
+234
+52
+49
+227
+49
+45
+219
+48
+40
+222
+56
+44
+221
+58
+43
+221
+58
+43
+222
+56
+40
+224
+52
+38
+227
+51
+36
+233
+51
+38
+236
+52
+42
+238
+53
+48
+238
+53
+50
+240
+52
+50
+240
+51
+47
+242
+50
+47
+239
+50
+44
+235
+52
+44
+231
+54
+46
+228
+61
+52
+205
+47
+38
+215
+62
+57
+202
+52
+53
+249
+98
+103
+255
+112
+121
+246
+91
+105
+237
+80
+99
+228
+70
+93
+243
+72
+104
+255
+61
+101
+255
+50
+93
+255
+55
+97
+245
+71
+104
+201
+74
+93
+148
+66
+70
+83
+43
+35
+88
+72
+56
+84
+75
+58
+79
+72
+54
+89
+80
+63
+83
+74
+57
+69
+64
+45
+71
+70
+49
+61
+67
+39
+64
+74
+40
+73
+85
+49
+83
+100
+58
+95
+114
+69
+101
+125
+73
+103
+132
+74
+101
+136
+72
+99
+136
+67
+97
+137
+66
+98
+138
+67
+99
+141
+69
+101
+142
+72
+102
+143
+77
+104
+143
+80
+105
+144
+81
+108
+144
+80
+107
+144
+77
+102
+141
+74
+99
+138
+73
+97
+136
+71
+96
+135
+70
+96
+135
+72
+96
+134
+73
+94
+129
+71
+94
+127
+70
+95
+125
+71
+96
+124
+73
+97
+123
+75
+100
+123
+77
+102
+124
+78
+102
+126
+78
+93
+120
+67
+92
+121
+63
+93
+122
+66
+68
+66
+54
+70
+68
+56
+74
+70
+59
+80
+71
+62
+82
+72
+62
+87
+73
+62
+93
+77
+62
+95
+79
+63
+96
+81
+62
+97
+82
+63
+96
+83
+66
+95
+86
+71
+98
+89
+82
+103
+98
+95
+111
+106
+110
+115
+111
+126
+119
+113
+147
+122
+116
+160
+124
+121
+168
+121
+119
+169
+112
+112
+166
+103
+103
+163
+96
+97
+162
+92
+95
+164
+96
+98
+173
+102
+104
+181
+111
+112
+192
+121
+122
+204
+132
+130
+214
+141
+139
+223
+150
+146
+231
+156
+153
+232
+160
+158
+223
+161
+160
+218
+163
+162
+219
+164
+163
+220
+166
+163
+220
+165
+162
+219
+165
+160
+216
+164
+159
+213
+165
+158
+210
+163
+156
+207
+162
+154
+201
+162
+153
+198
+159
+150
+193
+153
+142
+184
+142
+131
+171
+131
+124
+155
+113
+111
+124
+104
+103
+108
+99
+95
+96
+102
+90
+90
+108
+89
+85
+115
+86
+80
+128
+85
+78
+143
+86
+79
+150
+82
+73
+169
+89
+80
+181
+88
+80
+192
+91
+83
+216
+107
+100
+235
+122
+114
+246
+131
+124
+255
+139
+134
+249
+117
+113
+255
+117
+115
+237
+95
+93
+223
+80
+76
+217
+69
+65
+239
+90
+84
+204
+55
+49
+197
+50
+42
+196
+54
+42
+195
+55
+40
+192
+55
+39
+195
+55
+38
+198
+57
+40
+202
+59
+43
+208
+60
+46
+213
+63
+49
+210
+56
+46
+214
+60
+50
+215
+63
+52
+211
+59
+48
+205
+53
+40
+205
+51
+39
+216
+58
+47
+226
+64
+53
+224
+57
+48
+225
+57
+48
+222
+55
+46
+215
+55
+43
+207
+55
+41
+201
+58
+42
+198
+63
+44
+196
+65
+47
+194
+61
+46
+198
+64
+52
+203
+69
+58
+205
+71
+60
+204
+67
+59
+197
+60
+52
+187
+50
+44
+182
+43
+38
+199
+60
+55
+208
+69
+66
+217
+79
+76
+224
+86
+83
+227
+89
+86
+225
+88
+82
+216
+79
+73
+208
+67
+58
+205
+58
+42
+213
+58
+40
+220
+56
+44
+227
+53
+46
+232
+46
+47
+237
+42
+50
+240
+40
+51
+244
+39
+54
+251
+44
+62
+250
+43
+63
+251
+42
+63
+253
+41
+63
+255
+39
+63
+255
+38
+63
+255
+36
+60
+255
+35
+60
+255
+35
+55
+255
+38
+56
+255
+42
+59
+254
+44
+57
+244
+44
+54
+237
+46
+53
+233
+53
+54
+232
+60
+58
+221
+56
+52
+221
+58
+51
+222
+59
+52
+224
+59
+53
+227
+58
+53
+230
+57
+53
+233
+55
+51
+235
+53
+52
+235
+51
+53
+236
+52
+54
+235
+53
+52
+233
+53
+52
+231
+53
+51
+226
+53
+47
+221
+53
+44
+219
+53
+41
+220
+56
+44
+219
+57
+42
+220
+57
+40
+222
+57
+38
+223
+56
+38
+226
+55
+37
+227
+54
+37
+230
+52
+38
+236
+53
+45
+237
+52
+47
+240
+53
+48
+241
+52
+46
+241
+53
+44
+237
+53
+43
+232
+54
+42
+228
+56
+44
+222
+58
+48
+212
+55
+46
+211
+58
+53
+215
+62
+64
+255
+109
+117
+255
+98
+113
+248
+85
+106
+241
+75
+99
+247
+79
+105
+236
+58
+90
+249
+57
+94
+255
+63
+103
+245
+64
+99
+230
+80
+107
+178
+73
+87
+97
+36
+35
+71
+43
+32
+65
+56
+39
+75
+68
+52
+82
+76
+60
+79
+73
+57
+66
+67
+49
+59
+68
+47
+60
+73
+47
+65
+72
+38
+69
+75
+37
+75
+83
+46
+83
+93
+56
+91
+107
+68
+97
+118
+75
+100
+126
+78
+100
+131
+74
+98
+134
+70
+96
+136
+66
+97
+137
+64
+99
+139
+66
+101
+141
+70
+104
+144
+74
+108
+144
+80
+109
+145
+81
+108
+145
+76
+105
+142
+72
+103
+140
+71
+102
+139
+72
+102
+138
+74
+101
+137
+73
+99
+133
+72
+97
+131
+71
+100
+131
+74
+100
+129
+73
+98
+127
+71
+99
+126
+71
+100
+127
+74
+100
+127
+72
+101
+126
+71
+97
+125
+67
+91
+123
+60
+92
+127
+61
+95
+130
+66
+61
+63
+52
+63
+65
+54
+70
+67
+60
+74
+69
+63
+80
+69
+63
+84
+71
+62
+91
+75
+62
+93
+77
+61
+96
+79
+59
+96
+81
+60
+94
+83
+65
+94
+86
+73
+99
+91
+88
+104
+99
+105
+110
+108
+121
+115
+111
+134
+116
+112
+149
+118
+112
+158
+116
+112
+162
+112
+109
+162
+103
+102
+159
+97
+97
+159
+93
+94
+161
+92
+92
+164
+101
+100
+176
+107
+106
+186
+116
+114
+197
+125
+123
+207
+134
+130
+217
+141
+137
+224
+148
+142
+230
+152
+147
+229
+155
+149
+221
+156
+151
+217
+157
+152
+218
+158
+153
+219
+158
+151
+218
+157
+150
+217
+156
+150
+214
+155
+149
+211
+158
+150
+210
+156
+148
+205
+156
+147
+200
+155
+147
+198
+154
+145
+192
+147
+138
+183
+136
+127
+170
+128
+121
+154
+115
+109
+123
+107
+101
+105
+100
+94
+94
+101
+91
+89
+107
+90
+83
+113
+86
+77
+124
+84
+74
+141
+84
+75
+157
+84
+75
+178
+91
+82
+187
+88
+82
+195
+88
+82
+211
+102
+97
+221
+114
+106
+224
+120
+111
+235
+126
+119
+251
+136
+133
+255
+135
+133
+247
+117
+115
+238
+103
+100
+227
+85
+83
+235
+90
+85
+199
+50
+44
+194
+47
+37
+197
+55
+41
+195
+55
+38
+192
+55
+37
+193
+56
+38
+196
+56
+39
+200
+59
+42
+207
+59
+45
+211
+61
+47
+213
+57
+44
+213
+57
+44
+211
+58
+44
+210
+58
+44
+209
+57
+43
+209
+57
+43
+212
+56
+43
+216
+56
+44
+223
+59
+49
+224
+57
+48
+220
+56
+46
+214
+56
+44
+207
+57
+42
+200
+57
+40
+193
+58
+38
+190
+57
+38
+190
+54
+42
+193
+56
+48
+198
+61
+53
+201
+64
+56
+202
+65
+57
+200
+63
+55
+197
+60
+52
+194
+57
+49
+191
+52
+45
+199
+62
+54
+209
+72
+64
+216
+79
+71
+218
+81
+73
+215
+78
+70
+204
+67
+59
+195
+55
+42
+202
+55
+37
+211
+56
+36
+221
+55
+41
+229
+52
+44
+237
+47
+47
+244
+43
+51
+249
+41
+55
+253
+40
+58
+255
+43
+64
+255
+42
+65
+255
+41
+65
+255
+38
+65
+255
+35
+64
+255
+33
+60
+255
+30
+61
+255
+29
+58
+255
+30
+57
+255
+31
+56
+255
+36
+58
+255
+41
+59
+247
+45
+57
+241
+50
+58
+234
+55
+58
+230
+60
+60
+220
+57
+52
+220
+58
+53
+222
+59
+52
+224
+59
+53
+227
+58
+53
+230
+57
+53
+233
+55
+51
+235
+53
+50
+235
+51
+53
+236
+52
+54
+235
+53
+52
+232
+54
+52
+228
+55
+49
+223
+54
+47
+220
+53
+44
+217
+53
+41
+219
+57
+42
+219
+57
+42
+220
+57
+40
+220
+57
+38
+222
+57
+38
+223
+56
+37
+225
+56
+37
+227
+54
+37
+231
+53
+43
+234
+51
+43
+235
+52
+44
+235
+53
+42
+235
+53
+42
+232
+54
+40
+228
+55
+41
+223
+55
+42
+221
+61
+49
+209
+52
+43
+207
+53
+51
+239
+84
+88
+255
+102
+114
+255
+91
+111
+241
+73
+98
+249
+76
+104
+248
+69
+99
+247
+64
+95
+244
+56
+91
+243
+62
+97
+239
+78
+109
+205
+76
+98
+139
+56
+64
+89
+41
+37
+69
+51
+39
+60
+54
+40
+62
+59
+44
+67
+64
+49
+67
+66
+48
+61
+64
+45
+56
+68
+46
+58
+73
+44
+60
+68
+29
+75
+80
+39
+92
+98
+60
+101
+111
+74
+104
+118
+82
+101
+122
+81
+100
+126
+79
+100
+130
+76
+97
+131
+70
+97
+134
+65
+97
+137
+64
+99
+140
+64
+103
+141
+68
+105
+142
+72
+107
+144
+77
+108
+145
+78
+108
+145
+75
+106
+144
+71
+104
+141
+72
+102
+139
+70
+103
+138
+74
+102
+137
+73
+102
+133
+74
+100
+131
+72
+102
+131
+75
+100
+129
+73
+100
+127
+72
+100
+128
+70
+101
+129
+71
+101
+129
+71
+102
+127
+69
+98
+126
+65
+93
+128
+62
+95
+132
+63
+98
+135
+66
+54
+57
+46
+58
+60
+49
+63
+63
+55
+68
+65
+58
+75
+66
+59
+79
+69
+60
+86
+72
+61
+89
+76
+60
+94
+79
+60
+92
+79
+60
+92
+83
+66
+94
+87
+77
+99
+93
+93
+104
+101
+108
+111
+109
+123
+115
+113
+137
+115
+111
+148
+113
+107
+153
+106
+102
+152
+99
+96
+149
+92
+91
+148
+90
+90
+152
+92
+93
+160
+92
+95
+166
+104
+106
+181
+110
+111
+191
+119
+120
+202
+127
+128
+210
+134
+132
+216
+138
+136
+220
+143
+139
+224
+145
+142
+221
+147
+144
+215
+147
+144
+211
+147
+144
+211
+147
+144
+211
+148
+142
+212
+147
+141
+211
+147
+140
+208
+146
+139
+206
+149
+140
+205
+147
+139
+199
+148
+139
+194
+148
+140
+191
+147
+139
+186
+140
+133
+175
+131
+123
+162
+126
+115
+145
+121
+103
+119
+115
+96
+102
+103
+91
+91
+100
+91
+86
+100
+91
+82
+104
+88
+75
+117
+85
+72
+135
+83
+72
+166
+89
+81
+190
+95
+89
+203
+91
+89
+208
+88
+87
+218
+100
+98
+222
+109
+105
+220
+113
+107
+226
+119
+113
+251
+138
+132
+255
+138
+134
+255
+133
+129
+255
+125
+121
+247
+110
+104
+238
+97
+88
+196
+52
+43
+192
+50
+38
+196
+56
+41
+193
+58
+39
+192
+57
+38
+192
+57
+37
+194
+57
+38
+198
+59
+40
+204
+58
+43
+208
+58
+44
+214
+58
+45
+211
+53
+41
+206
+53
+39
+208
+56
+42
+212
+62
+47
+212
+62
+47
+206
+54
+40
+203
+47
+34
+218
+58
+46
+218
+56
+45
+217
+55
+44
+214
+56
+44
+208
+58
+43
+201
+58
+41
+194
+57
+38
+190
+55
+36
+189
+53
+41
+192
+54
+44
+194
+56
+46
+196
+58
+48
+199
+61
+51
+202
+64
+54
+203
+65
+55
+204
+66
+56
+199
+58
+49
+202
+64
+54
+207
+69
+59
+208
+70
+60
+210
+72
+62
+209
+71
+61
+202
+64
+54
+197
+55
+43
+204
+54
+37
+214
+54
+38
+223
+55
+44
+231
+52
+47
+241
+48
+51
+246
+45
+53
+251
+43
+57
+255
+42
+60
+252
+39
+59
+252
+39
+61
+251
+37
+61
+249
+35
+59
+251
+33
+58
+250
+30
+55
+252
+28
+55
+254
+27
+54
+255
+29
+55
+255
+30
+53
+254
+35
+55
+253
+42
+59
+247
+50
+60
+242
+55
+62
+236
+57
+60
+229
+59
+59
+220
+57
+52
+220
+58
+53
+222
+59
+52
+224
+59
+53
+229
+57
+53
+231
+56
+53
+233
+55
+51
+235
+53
+50
+237
+51
+54
+238
+52
+55
+237
+53
+53
+234
+54
+53
+229
+54
+49
+225
+54
+47
+220
+53
+44
+216
+52
+40
+218
+56
+41
+217
+57
+41
+218
+57
+39
+219
+56
+37
+221
+56
+37
+222
+55
+36
+224
+55
+36
+225
+54
+37
+225
+53
+39
+226
+52
+41
+227
+53
+42
+227
+54
+40
+227
+54
+40
+225
+55
+40
+221
+55
+41
+218
+56
+43
+219
+61
+50
+204
+50
+42
+211
+56
+54
+255
+108
+112
+255
+93
+108
+249
+81
+104
+237
+62
+91
+255
+75
+108
+247
+59
+92
+255
+66
+100
+240
+56
+90
+233
+65
+98
+227
+87
+113
+171
+64
+82
+101
+34
+41
+81
+46
+42
+65
+52
+43
+52
+53
+39
+53
+54
+38
+58
+59
+41
+63
+62
+42
+62
+61
+40
+60
+64
+41
+62
+69
+38
+62
+70
+29
+88
+97
+52
+115
+126
+84
+128
+140
+100
+119
+135
+96
+104
+127
+83
+97
+125
+76
+97
+128
+71
+96
+131
+67
+96
+133
+63
+97
+137
+64
+99
+140
+64
+104
+142
+69
+106
+143
+74
+107
+144
+77
+108
+145
+78
+110
+147
+77
+107
+145
+72
+104
+141
+72
+103
+140
+71
+104
+139
+75
+104
+139
+75
+102
+136
+76
+100
+134
+74
+101
+132
+75
+100
+131
+74
+99
+128
+70
+100
+129
+71
+102
+130
+72
+102
+130
+71
+101
+129
+70
+98
+128
+66
+99
+134
+68
+101
+138
+69
+104
+141
+72
+50
+53
+42
+53
+56
+45
+59
+60
+52
+65
+62
+55
+71
+64
+58
+75
+66
+59
+82
+69
+60
+86
+74
+60
+88
+76
+60
+89
+77
+61
+89
+81
+68
+94
+87
+79
+99
+94
+98
+105
+103
+114
+111
+110
+128
+114
+111
+140
+114
+109
+149
+106
+103
+148
+96
+94
+143
+87
+87
+139
+84
+85
+142
+87
+88
+152
+92
+95
+162
+97
+99
+173
+108
+110
+187
+114
+115
+195
+123
+124
+206
+130
+131
+213
+136
+134
+217
+138
+136
+219
+140
+136
+220
+141
+138
+217
+143
+142
+212
+143
+140
+209
+143
+140
+209
+142
+139
+210
+143
+137
+211
+142
+136
+210
+142
+134
+209
+141
+133
+206
+143
+133
+202
+142
+133
+196
+143
+134
+191
+144
+136
+187
+143
+136
+180
+137
+131
+169
+128
+121
+154
+126
+112
+137
+127
+96
+112
+121
+90
+96
+107
+89
+89
+99
+92
+84
+96
+94
+81
+98
+91
+73
+109
+86
+70
+128
+82
+69
+161
+84
+76
+193
+91
+89
+209
+89
+91
+217
+88
+92
+228
+99
+103
+228
+108
+107
+224
+112
+108
+228
+121
+115
+236
+125
+118
+237
+122
+115
+254
+131
+126
+255
+134
+129
+255
+129
+123
+245
+107
+97
+201
+60
+50
+196
+56
+41
+194
+59
+40
+191
+58
+39
+191
+59
+38
+190
+58
+37
+193
+58
+38
+197
+58
+39
+200
+57
+41
+206
+56
+42
+216
+58
+46
+212
+54
+42
+206
+53
+39
+206
+56
+41
+209
+62
+46
+209
+62
+46
+203
+56
+40
+199
+47
+33
+210
+54
+41
+211
+53
+41
+210
+52
+40
+210
+54
+41
+209
+57
+43
+205
+60
+43
+200
+61
+42
+196
+59
+41
+196
+58
+45
+196
+58
+47
+198
+57
+48
+198
+57
+47
+199
+58
+49
+200
+59
+49
+201
+60
+51
+203
+61
+51
+211
+68
+60
+211
+69
+59
+208
+65
+57
+203
+61
+51
+203
+60
+52
+207
+65
+55
+207
+64
+56
+206
+59
+49
+206
+53
+39
+217
+53
+41
+226
+53
+46
+235
+51
+49
+242
+47
+53
+247
+43
+54
+249
+41
+55
+252
+41
+58
+249
+38
+57
+247
+38
+59
+247
+38
+59
+248
+39
+60
+251
+38
+60
+253
+37
+58
+255
+36
+58
+255
+35
+58
+255
+33
+54
+253
+34
+54
+250
+37
+55
+249
+44
+59
+247
+53
+62
+242
+57
+63
+233
+57
+59
+225
+57
+56
+220
+57
+52
+220
+58
+53
+222
+59
+52
+224
+59
+53
+229
+57
+53
+231
+56
+53
+233
+55
+51
+235
+53
+52
+238
+52
+55
+238
+52
+55
+238
+54
+54
+234
+54
+53
+230
+55
+50
+225
+54
+47
+220
+53
+44
+215
+53
+42
+216
+56
+42
+216
+56
+40
+216
+56
+40
+217
+56
+38
+218
+55
+38
+220
+55
+36
+221
+54
+36
+221
+54
+36
+219
+53
+37
+220
+54
+40
+221
+55
+39
+220
+57
+40
+220
+57
+40
+218
+59
+40
+215
+58
+41
+214
+58
+43
+213
+59
+49
+206
+51
+46
+231
+73
+74
+255
+111
+119
+254
+85
+104
+243
+69
+94
+243
+62
+95
+255
+67
+102
+251
+55
+91
+252
+60
+97
+240
+66
+99
+228
+79
+108
+196
+80
+101
+129
+47
+61
+78
+29
+33
+72
+48
+46
+54
+47
+39
+50
+52
+39
+56
+58
+44
+62
+65
+46
+65
+64
+43
+63
+61
+36
+65
+64
+36
+69
+70
+36
+84
+93
+48
+112
+126
+77
+143
+159
+114
+151
+168
+124
+131
+152
+109
+106
+132
+87
+95
+123
+74
+93
+126
+69
+95
+131
+67
+97
+134
+64
+98
+138
+65
+102
+143
+67
+107
+144
+74
+108
+145
+76
+109
+146
+79
+109
+146
+79
+111
+148
+78
+108
+146
+73
+105
+142
+73
+104
+141
+72
+105
+140
+76
+105
+140
+76
+104
+138
+78
+103
+137
+77
+102
+133
+76
+100
+131
+74
+100
+129
+71
+101
+130
+72
+103
+131
+72
+104
+132
+73
+102
+130
+71
+100
+130
+68
+103
+138
+72
+105
+142
+73
+108
+145
+76
+45
+51
+39
+51
+54
+43
+56
+57
+49
+60
+59
+54
+66
+61
+57
+71
+64
+58
+77
+68
+61
+81
+71
+61
+83
+73
+61
+83
+75
+62
+85
+78
+68
+90
+85
+81
+97
+94
+101
+105
+103
+117
+109
+107
+129
+108
+107
+138
+106
+104
+144
+98
+96
+143
+88
+86
+136
+80
+80
+134
+81
+81
+141
+88
+89
+154
+96
+99
+170
+102
+106
+180
+111
+114
+193
+117
+120
+201
+124
+127
+208
+130
+133
+214
+134
+135
+217
+135
+136
+216
+138
+137
+217
+139
+138
+214
+139
+139
+209
+139
+138
+206
+138
+136
+209
+137
+135
+210
+137
+133
+210
+136
+131
+211
+138
+131
+211
+137
+130
+207
+140
+132
+205
+139
+132
+199
+141
+133
+192
+141
+134
+185
+141
+134
+175
+135
+130
+162
+126
+120
+146
+127
+110
+129
+131
+90
+104
+125
+84
+90
+108
+87
+84
+99
+92
+82
+92
+96
+79
+91
+95
+72
+102
+90
+68
+122
+83
+66
+149
+74
+68
+187
+83
+82
+209
+83
+87
+219
+82
+89
+230
+93
+100
+231
+102
+106
+224
+108
+108
+227
+118
+113
+228
+117
+110
+226
+111
+104
+247
+126
+118
+255
+130
+123
+255
+135
+126
+244
+108
+96
+201
+63
+50
+193
+56
+40
+192
+59
+40
+191
+61
+39
+191
+61
+39
+192
+60
+39
+194
+59
+39
+197
+58
+39
+199
+56
+40
+205
+55
+41
+216
+58
+47
+217
+56
+46
+210
+56
+44
+207
+57
+43
+204
+58
+43
+201
+58
+42
+200
+57
+41
+201
+55
+40
+207
+57
+43
+209
+55
+43
+210
+56
+44
+209
+55
+43
+207
+55
+42
+204
+56
+42
+203
+60
+44
+203
+62
+45
+202
+60
+48
+201
+61
+48
+202
+60
+50
+201
+59
+47
+200
+58
+48
+198
+56
+44
+197
+55
+45
+197
+53
+42
+208
+64
+55
+208
+64
+53
+205
+61
+52
+201
+57
+46
+203
+56
+48
+206
+59
+49
+205
+58
+50
+204
+53
+44
+208
+47
+37
+217
+48
+41
+228
+50
+48
+236
+50
+53
+244
+47
+56
+249
+45
+57
+251
+43
+59
+252
+44
+60
+252
+45
+63
+251
+46
+63
+252
+47
+64
+252
+47
+64
+254
+47
+65
+255
+47
+63
+255
+45
+63
+255
+46
+64
+255
+40
+56
+251
+40
+55
+247
+43
+55
+245
+48
+58
+241
+54
+61
+237
+56
+61
+228
+56
+56
+221
+53
+52
+220
+57
+52
+220
+58
+53
+222
+59
+54
+226
+58
+55
+229
+57
+53
+231
+56
+53
+234
+54
+53
+236
+52
+52
+241
+52
+56
+241
+52
+56
+239
+53
+54
+237
+55
+54
+230
+55
+50
+225
+54
+47
+218
+54
+44
+215
+53
+42
+216
+56
+42
+214
+57
+40
+214
+57
+40
+216
+57
+38
+216
+57
+38
+217
+56
+38
+218
+55
+38
+217
+56
+38
+213
+56
+37
+213
+58
+38
+214
+59
+39
+213
+61
+40
+212
+61
+40
+211
+62
+42
+211
+61
+44
+211
+61
+46
+208
+55
+47
+215
+60
+56
+255
+93
+100
+255
+96
+111
+255
+80
+103
+240
+60
+89
+255
+66
+104
+250
+55
+95
+255
+55
+95
+242
+52
+88
+237
+78
+108
+215
+92
+113
+148
+64
+79
+91
+38
+46
+71
+40
+45
+63
+49
+48
+49
+46
+41
+52
+54
+43
+58
+62
+47
+60
+65
+43
+58
+61
+34
+62
+61
+30
+80
+74
+40
+94
+92
+53
+121
+133
+83
+144
+163
+108
+170
+190
+139
+168
+190
+141
+142
+165
+119
+111
+139
+91
+97
+127
+75
+94
+127
+70
+96
+132
+68
+99
+136
+66
+101
+141
+68
+106
+147
+71
+111
+148
+78
+112
+149
+80
+111
+147
+83
+111
+147
+83
+111
+148
+78
+108
+146
+73
+105
+142
+73
+103
+140
+71
+105
+140
+76
+105
+140
+76
+105
+139
+79
+104
+138
+78
+102
+133
+74
+101
+132
+73
+100
+131
+72
+101
+132
+73
+103
+133
+73
+104
+134
+72
+103
+133
+71
+101
+133
+68
+105
+142
+73
+105
+145
+75
+108
+148
+78
+43
+49
+37
+46
+52
+42
+52
+55
+48
+56
+57
+51
+62
+58
+55
+66
+61
+58
+72
+65
+59
+75
+68
+60
+78
+72
+60
+78
+71
+61
+79
+74
+68
+87
+83
+82
+95
+94
+102
+102
+101
+117
+103
+103
+127
+103
+102
+134
+98
+97
+137
+91
+89
+138
+81
+81
+133
+78
+79
+135
+82
+83
+147
+91
+94
+163
+101
+105
+179
+108
+111
+190
+117
+119
+202
+122
+124
+209
+127
+129
+214
+131
+133
+216
+134
+135
+217
+134
+135
+215
+136
+135
+213
+137
+136
+212
+135
+135
+205
+134
+134
+204
+134
+132
+205
+133
+130
+207
+133
+128
+210
+133
+128
+210
+135
+127
+212
+135
+128
+208
+141
+133
+210
+140
+133
+201
+141
+133
+192
+140
+134
+182
+139
+133
+169
+132
+128
+155
+123
+118
+138
+124
+106
+120
+129
+87
+97
+126
+81
+86
+109
+85
+81
+100
+94
+80
+92
+100
+77
+89
+97
+73
+99
+93
+69
+118
+87
+67
+146
+78
+69
+183
+85
+82
+209
+84
+90
+219
+82
+90
+231
+92
+99
+231
+98
+103
+228
+104
+106
+231
+113
+111
+236
+121
+114
+230
+113
+104
+247
+124
+116
+243
+115
+106
+254
+120
+109
+230
+92
+81
+196
+59
+43
+190
+53
+35
+194
+59
+39
+193
+61
+40
+193
+61
+40
+195
+60
+40
+196
+59
+40
+200
+59
+41
+203
+57
+42
+207
+55
+42
+214
+53
+43
+216
+55
+45
+212
+58
+46
+206
+58
+44
+199
+58
+41
+196
+56
+39
+198
+58
+41
+202
+61
+44
+207
+61
+46
+214
+64
+50
+217
+65
+52
+214
+62
+49
+206
+56
+42
+200
+52
+38
+202
+56
+41
+203
+60
+44
+201
+58
+44
+200
+58
+44
+201
+59
+47
+201
+59
+45
+202
+58
+47
+200
+57
+43
+200
+53
+43
+199
+53
+40
+202
+54
+44
+207
+59
+47
+210
+62
+52
+211
+63
+51
+214
+63
+54
+213
+62
+51
+206
+55
+46
+201
+44
+35
+210
+43
+37
+220
+45
+42
+231
+48
+50
+240
+51
+57
+246
+49
+59
+250
+48
+60
+253
+48
+63
+253
+48
+63
+249
+48
+64
+247
+49
+64
+247
+49
+64
+246
+48
+61
+247
+47
+60
+247
+45
+57
+250
+44
+57
+250
+42
+55
+252
+46
+59
+248
+46
+58
+245
+48
+58
+240
+51
+58
+237
+54
+59
+231
+55
+58
+224
+54
+54
+218
+53
+51
+220
+57
+52
+221
+58
+53
+223
+58
+54
+226
+58
+55
+229
+57
+53
+231
+56
+53
+234
+54
+53
+236
+52
+52
+242
+53
+57
+242
+53
+57
+240
+54
+55
+237
+55
+54
+230
+55
+52
+223
+54
+47
+218
+54
+45
+214
+54
+42
+213
+55
+43
+212
+56
+41
+212
+56
+41
+212
+57
+39
+213
+56
+39
+213
+56
+37
+215
+55
+39
+212
+57
+37
+208
+57
+36
+206
+60
+37
+207
+61
+38
+207
+63
+39
+206
+64
+40
+206
+64
+42
+206
+63
+46
+208
+60
+48
+208
+55
+49
+232
+72
+72
+255
+103
+113
+254
+78
+98
+255
+72
+100
+246
+56
+90
+255
+66
+108
+246
+49
+92
+255
+57
+96
+234
+55
+87
+221
+83
+106
+185
+87
+102
+107
+50
+57
+71
+41
+43
+71
+55
+58
+59
+50
+51
+56
+51
+48
+58
+55
+48
+57
+59
+45
+53
+58
+35
+51
+56
+24
+66
+68
+29
+102
+99
+58
+129
+131
+84
+159
+174
+119
+169
+193
+135
+181
+206
+151
+175
+199
+147
+146
+174
+125
+118
+148
+98
+101
+134
+81
+96
+130
+70
+96
+133
+66
+99
+136
+66
+103
+143
+70
+109
+150
+74
+114
+152
+79
+114
+151
+82
+113
+149
+85
+112
+148
+84
+111
+148
+78
+108
+145
+75
+104
+141
+72
+102
+139
+70
+104
+139
+75
+105
+140
+76
+105
+139
+78
+105
+139
+79
+103
+134
+75
+102
+133
+74
+101
+132
+73
+102
+133
+73
+104
+136
+73
+105
+137
+72
+105
+135
+71
+102
+134
+67
+106
+143
+74
+107
+147
+77
+110
+150
+80
+40
+48
+35
+43
+49
+39
+47
+52
+45
+51
+53
+48
+55
+54
+52
+60
+56
+53
+64
+61
+56
+67
+62
+56
+73
+69
+60
+72
+69
+60
+75
+72
+67
+82
+80
+81
+91
+91
+101
+97
+98
+116
+98
+98
+124
+96
+96
+130
+95
+94
+136
+90
+88
+138
+84
+84
+138
+84
+84
+144
+92
+93
+160
+103
+105
+179
+112
+115
+196
+118
+120
+205
+123
+127
+216
+126
+130
+219
+131
+132
+222
+132
+134
+221
+132
+133
+216
+131
+132
+214
+133
+132
+212
+134
+133
+209
+131
+134
+203
+130
+133
+202
+131
+131
+205
+130
+129
+207
+131
+127
+211
+133
+128
+212
+136
+128
+214
+136
+128
+211
+141
+133
+210
+139
+132
+200
+139
+131
+188
+139
+132
+176
+137
+130
+163
+129
+124
+146
+119
+113
+127
+117
+102
+109
+125
+86
+91
+121
+81
+81
+107
+87
+78
+101
+95
+79
+93
+101
+77
+91
+100
+73
+100
+96
+71
+116
+91
+69
+140
+82
+70
+176
+91
+84
+202
+89
+91
+214
+85
+90
+226
+91
+97
+230
+93
+100
+231
+98
+101
+237
+109
+108
+245
+122
+115
+237
+114
+106
+247
+120
+111
+222
+89
+80
+229
+91
+80
+210
+68
+56
+195
+53
+39
+199
+58
+41
+197
+58
+39
+196
+60
+38
+197
+61
+39
+200
+61
+40
+202
+59
+42
+205
+58
+42
+208
+56
+42
+212
+54
+42
+211
+48
+39
+212
+51
+41
+210
+56
+44
+205
+59
+44
+199
+59
+42
+194
+59
+40
+192
+59
+40
+195
+60
+41
+200
+59
+42
+213
+67
+52
+225
+75
+61
+222
+72
+58
+211
+61
+47
+202
+52
+38
+201
+53
+39
+205
+59
+44
+200
+57
+41
+200
+57
+41
+200
+57
+43
+200
+57
+41
+202
+56
+43
+202
+56
+41
+203
+55
+43
+203
+55
+41
+205
+54
+43
+210
+60
+46
+215
+63
+52
+216
+64
+51
+218
+64
+54
+219
+65
+53
+215
+58
+49
+210
+49
+41
+220
+48
+46
+229
+49
+52
+238
+52
+57
+245
+54
+62
+249
+52
+62
+249
+49
+62
+250
+48
+64
+248
+47
+63
+242
+46
+60
+239
+47
+60
+237
+47
+57
+237
+48
+55
+239
+45
+53
+239
+44
+50
+242
+43
+50
+241
+42
+49
+244
+49
+57
+244
+50
+58
+242
+53
+59
+236
+53
+57
+229
+53
+55
+225
+53
+53
+223
+55
+54
+221
+56
+54
+220
+56
+54
+221
+57
+55
+223
+58
+54
+227
+58
+55
+230
+56
+55
+233
+55
+55
+234
+54
+55
+236
+52
+54
+244
+53
+58
+244
+53
+58
+241
+55
+58
+238
+56
+55
+230
+55
+52
+224
+55
+48
+218
+54
+45
+212
+54
+42
+211
+55
+42
+209
+56
+42
+208
+56
+42
+208
+57
+40
+208
+57
+40
+208
+57
+38
+209
+56
+40
+208
+57
+38
+203
+57
+34
+200
+58
+34
+200
+62
+36
+199
+63
+37
+200
+64
+40
+200
+64
+42
+203
+62
+45
+206
+59
+49
+213
+58
+54
+250
+85
+91
+255
+94
+111
+255
+71
+97
+253
+62
+95
+254
+58
+96
+255
+56
+102
+250
+53
+98
+244
+58
+95
+230
+71
+99
+192
+80
+96
+135
+64
+72
+84
+50
+51
+67
+53
+52
+68
+57
+61
+62
+51
+55
+66
+51
+54
+64
+53
+49
+58
+56
+43
+54
+60
+34
+57
+67
+30
+80
+92
+46
+125
+132
+80
+159
+168
+113
+176
+197
+138
+175
+203
+142
+176
+204
+146
+166
+195
+141
+146
+174
+125
+123
+153
+101
+103
+136
+81
+95
+129
+69
+94
+131
+64
+99
+137
+64
+105
+143
+68
+111
+149
+74
+115
+153
+80
+115
+152
+83
+113
+149
+85
+111
+147
+83
+110
+147
+78
+107
+144
+74
+103
+140
+71
+101
+138
+69
+103
+138
+74
+104
+139
+75
+105
+139
+78
+105
+139
+78
+102
+136
+75
+100
+134
+73
+100
+134
+73
+101
+136
+72
+103
+138
+74
+104
+139
+73
+105
+137
+72
+102
+137
+69
+106
+146
+76
+108
+150
+78
+111
+153
+81
+38
+46
+33
+40
+48
+37
+45
+50
+43
+49
+51
+46
+51
+51
+49
+55
+54
+52
+58
+57
+53
+60
+59
+54
+71
+68
+61
+68
+68
+60
+71
+70
+66
+79
+79
+81
+90
+90
+100
+95
+97
+112
+94
+96
+121
+92
+92
+126
+96
+95
+137
+92
+90
+140
+89
+88
+145
+92
+92
+154
+103
+103
+173
+113
+115
+192
+122
+124
+209
+127
+128
+220
+129
+132
+225
+130
+133
+228
+133
+134
+227
+132
+133
+225
+131
+131
+219
+129
+130
+213
+131
+130
+210
+131
+130
+206
+132
+135
+204
+131
+134
+201
+132
+132
+204
+131
+130
+206
+133
+130
+211
+135
+130
+214
+138
+130
+215
+140
+131
+212
+141
+133
+208
+140
+131
+196
+139
+130
+183
+138
+130
+171
+133
+127
+155
+127
+120
+136
+115
+110
+117
+111
+99
+99
+117
+87
+85
+114
+84
+76
+105
+87
+75
+102
+95
+77
+99
+101
+77
+97
+100
+73
+102
+96
+70
+115
+93
+70
+125
+79
+63
+159
+89
+77
+184
+89
+83
+197
+83
+82
+215
+86
+90
+226
+87
+92
+233
+90
+96
+240
+100
+101
+247
+114
+109
+241
+110
+102
+247
+113
+104
+209
+68
+59
+212
+65
+55
+197
+49
+37
+200
+52
+38
+212
+67
+50
+199
+57
+37
+199
+58
+38
+201
+59
+39
+205
+60
+41
+208
+58
+43
+211
+58
+44
+216
+56
+44
+217
+55
+44
+207
+44
+35
+206
+48
+37
+206
+54
+41
+203
+60
+44
+199
+64
+45
+193
+62
+42
+190
+59
+39
+188
+55
+36
+192
+52
+35
+209
+66
+50
+227
+79
+65
+228
+78
+64
+216
+66
+52
+203
+55
+41
+203
+55
+41
+208
+62
+47
+202
+59
+43
+201
+58
+42
+199
+56
+40
+198
+55
+39
+200
+54
+39
+202
+54
+40
+206
+56
+42
+208
+56
+43
+211
+59
+46
+213
+59
+47
+213
+57
+45
+210
+54
+42
+213
+55
+44
+218
+60
+49
+221
+60
+50
+220
+55
+49
+232
+56
+56
+241
+56
+61
+247
+58
+65
+251
+57
+66
+250
+52
+65
+245
+47
+60
+242
+44
+59
+239
+44
+58
+237
+47
+59
+234
+49
+57
+234
+51
+56
+235
+52
+56
+237
+53
+55
+241
+53
+54
+244
+51
+54
+243
+53
+55
+239
+50
+54
+238
+53
+58
+236
+56
+59
+233
+54
+57
+226
+52
+53
+222
+52
+52
+223
+55
+54
+225
+60
+58
+221
+56
+54
+222
+57
+55
+225
+57
+54
+227
+58
+55
+230
+56
+55
+233
+55
+55
+234
+54
+55
+236
+52
+54
+244
+53
+58
+244
+53
+58
+241
+55
+58
+236
+56
+57
+230
+57
+53
+223
+56
+50
+216
+55
+47
+211
+55
+43
+208
+56
+43
+205
+58
+42
+205
+57
+43
+204
+59
+42
+205
+58
+42
+205
+58
+40
+205
+58
+42
+204
+59
+40
+197
+57
+34
+194
+58
+34
+195
+61
+36
+194
+62
+37
+195
+63
+40
+198
+63
+43
+201
+61
+46
+205
+56
+49
+220
+60
+62
+255
+93
+102
+255
+81
+103
+255
+72
+100
+250
+56
+91
+255
+63
+103
+246
+46
+92
+251
+62
+104
+228
+61
+91
+224
+93
+111
+162
+76
+85
+91
+45
+45
+71
+56
+51
+70
+66
+63
+64
+55
+58
+67
+52
+57
+71
+48
+54
+70
+50
+49
+64
+57
+41
+63
+68
+38
+69
+86
+42
+96
+116
+63
+139
+157
+97
+170
+190
+127
+177
+203
+140
+171
+201
+139
+166
+195
+139
+157
+186
+132
+142
+172
+122
+123
+153
+101
+102
+135
+80
+90
+124
+64
+94
+129
+63
+97
+135
+62
+104
+142
+67
+111
+149
+74
+114
+152
+79
+114
+151
+82
+112
+148
+84
+110
+146
+82
+110
+147
+78
+106
+143
+73
+102
+139
+70
+100
+137
+68
+102
+137
+73
+104
+139
+75
+105
+139
+78
+105
+139
+78
+102
+136
+75
+101
+135
+74
+100
+135
+71
+101
+136
+70
+103
+138
+72
+104
+139
+71
+104
+139
+71
+101
+138
+68
+107
+147
+76
+109
+151
+79
+112
+154
+82
+40
+48
+33
+39
+47
+34
+40
+45
+38
+41
+46
+40
+46
+48
+45
+51
+51
+49
+55
+56
+51
+57
+58
+52
+61
+61
+53
+63
+64
+56
+68
+69
+64
+74
+76
+75
+79
+82
+89
+86
+88
+101
+90
+92
+115
+93
+94
+125
+89
+88
+130
+91
+89
+139
+94
+93
+150
+101
+101
+163
+110
+110
+182
+119
+120
+200
+127
+129
+216
+132
+133
+226
+140
+140
+238
+140
+140
+240
+138
+138
+236
+134
+135
+228
+130
+130
+220
+128
+128
+214
+130
+128
+211
+131
+130
+206
+128
+131
+198
+129
+133
+197
+131
+131
+201
+132
+132
+206
+134
+131
+208
+136
+131
+211
+139
+132
+210
+140
+132
+207
+138
+128
+197
+138
+128
+188
+137
+128
+175
+135
+125
+160
+128
+120
+143
+119
+111
+122
+107
+101
+103
+102
+93
+88
+106
+92
+81
+108
+92
+77
+104
+92
+76
+102
+94
+75
+101
+95
+73
+102
+96
+72
+106
+96
+71
+114
+94
+70
+114
+79
+59
+135
+84
+65
+166
+92
+79
+193
+96
+89
+209
+89
+88
+220
+81
+84
+237
+83
+91
+247
+92
+96
+249
+104
+101
+230
+89
+80
+212
+68
+60
+206
+55
+48
+209
+55
+47
+215
+58
+49
+214
+61
+47
+212
+59
+43
+207
+57
+40
+205
+58
+38
+207
+57
+40
+209
+58
+41
+212
+56
+41
+216
+56
+42
+220
+53
+44
+220
+53
+44
+208
+47
+37
+205
+51
+41
+204
+56
+44
+202
+62
+47
+197
+64
+47
+193
+64
+45
+190
+61
+42
+188
+57
+39
+194
+57
+41
+190
+48
+34
+233
+87
+74
+223
+75
+63
+195
+47
+35
+209
+61
+49
+206
+60
+47
+199
+56
+40
+202
+59
+43
+201
+58
+41
+200
+57
+40
+199
+56
+39
+200
+55
+38
+201
+54
+38
+203
+53
+38
+204
+52
+38
+208
+55
+41
+215
+59
+46
+220
+62
+50
+220
+60
+48
+217
+55
+44
+218
+56
+45
+226
+62
+52
+236
+67
+60
+245
+66
+69
+242
+57
+63
+240
+50
+60
+246
+52
+63
+246
+50
+64
+241
+45
+59
+237
+45
+58
+237
+50
+61
+236
+55
+62
+230
+53
+59
+228
+54
+56
+229
+55
+56
+235
+57
+57
+240
+58
+57
+241
+55
+56
+239
+55
+55
+242
+59
+61
+238
+60
+60
+234
+58
+58
+230
+56
+55
+225
+56
+53
+223
+55
+52
+220
+55
+53
+220
+55
+53
+222
+57
+55
+225
+57
+56
+227
+57
+57
+230
+58
+58
+233
+57
+59
+236
+57
+60
+237
+57
+60
+239
+56
+60
+244
+55
+59
+243
+54
+58
+240
+56
+58
+237
+57
+58
+231
+59
+57
+224
+59
+53
+215
+57
+48
+207
+55
+44
+202
+56
+43
+200
+57
+41
+199
+57
+43
+198
+58
+41
+199
+58
+41
+199
+58
+40
+200
+59
+42
+199
+60
+41
+193
+57
+35
+196
+61
+39
+190
+58
+35
+182
+52
+30
+188
+57
+37
+201
+68
+51
+206
+64
+54
+201
+49
+44
+255
+95
+101
+255
+87
+103
+255
+75
+98
+252
+61
+92
+245
+51
+88
+242
+50
+89
+247
+56
+99
+240
+69
+105
+228
+91
+111
+171
+71
+81
+110
+52
+51
+78
+51
+44
+67
+63
+54
+65
+66
+60
+66
+54
+56
+66
+43
+49
+77
+46
+51
+77
+49
+46
+67
+56
+38
+68
+74
+40
+88
+110
+61
+125
+155
+95
+155
+186
+119
+167
+198
+130
+171
+203
+140
+159
+190
+130
+152
+182
+128
+148
+178
+126
+130
+160
+110
+102
+132
+82
+88
+118
+66
+89
+123
+63
+93
+128
+62
+99
+135
+65
+105
+143
+68
+110
+148
+73
+109
+149
+76
+108
+148
+78
+107
+146
+79
+108
+145
+78
+105
+142
+73
+102
+138
+68
+99
+134
+66
+99
+134
+66
+102
+137
+73
+104
+139
+75
+102
+138
+76
+100
+136
+74
+103
+139
+77
+104
+140
+78
+103
+139
+75
+102
+139
+72
+101
+138
+69
+102
+139
+69
+106
+143
+73
+107
+147
+74
+113
+155
+81
+113
+157
+82
+114
+158
+83
+42
+48
+34
+41
+47
+35
+41
+46
+39
+41
+46
+40
+45
+47
+44
+49
+51
+48
+53
+54
+49
+55
+56
+50
+59
+60
+52
+62
+63
+55
+65
+68
+61
+72
+74
+71
+79
+80
+84
+83
+85
+97
+88
+89
+107
+90
+92
+117
+92
+90
+127
+94
+93
+137
+100
+98
+148
+107
+106
+164
+117
+116
+186
+127
+126
+206
+135
+135
+223
+139
+140
+233
+141
+141
+239
+140
+140
+240
+137
+137
+235
+133
+132
+226
+128
+128
+216
+128
+126
+210
+128
+127
+207
+130
+130
+204
+133
+134
+199
+134
+135
+199
+135
+136
+201
+137
+136
+204
+139
+136
+207
+140
+134
+206
+141
+134
+204
+142
+133
+200
+138
+128
+188
+137
+127
+177
+134
+124
+161
+130
+120
+147
+123
+115
+130
+116
+107
+112
+108
+98
+96
+100
+93
+83
+99
+96
+79
+98
+96
+75
+101
+94
+75
+102
+94
+75
+105
+92
+73
+108
+93
+72
+110
+94
+71
+113
+93
+69
+121
+93
+71
+130
+89
+67
+149
+88
+70
+173
+90
+76
+199
+86
+80
+221
+83
+83
+243
+82
+88
+254
+89
+95
+240
+85
+83
+227
+76
+69
+217
+62
+57
+213
+54
+48
+217
+54
+47
+220
+57
+48
+219
+57
+44
+214
+57
+40
+211
+56
+38
+209
+56
+38
+209
+56
+40
+212
+56
+41
+215
+55
+41
+220
+54
+42
+223
+52
+44
+221
+53
+44
+206
+48
+39
+201
+53
+41
+200
+57
+43
+198
+61
+45
+196
+65
+47
+193
+64
+45
+191
+60
+42
+190
+57
+40
+196
+56
+41
+203
+60
+46
+228
+82
+69
+220
+72
+60
+200
+52
+40
+204
+58
+45
+200
+58
+44
+194
+52
+38
+202
+61
+44
+203
+60
+43
+202
+59
+42
+202
+59
+42
+203
+58
+41
+204
+57
+41
+206
+56
+41
+207
+54
+40
+211
+55
+42
+214
+56
+44
+217
+55
+44
+215
+51
+41
+213
+49
+39
+216
+49
+40
+222
+55
+46
+231
+60
+53
+248
+68
+71
+241
+56
+62
+237
+47
+57
+239
+47
+58
+240
+48
+61
+238
+46
+59
+235
+49
+60
+235
+54
+63
+228
+53
+58
+220
+51
+54
+216
+50
+50
+223
+58
+56
+238
+69
+66
+248
+73
+70
+248
+68
+67
+243
+63
+62
+233
+58
+55
+231
+57
+56
+229
+57
+55
+226
+57
+54
+225
+56
+53
+224
+56
+53
+225
+57
+56
+225
+57
+56
+224
+56
+55
+226
+56
+56
+229
+57
+57
+231
+57
+58
+233
+57
+59
+236
+57
+60
+237
+57
+60
+238
+55
+59
+243
+54
+58
+242
+53
+57
+238
+54
+56
+234
+56
+56
+228
+59
+56
+220
+58
+53
+211
+57
+47
+203
+55
+43
+198
+56
+42
+195
+58
+42
+194
+58
+42
+192
+59
+42
+192
+59
+42
+193
+60
+41
+193
+60
+43
+193
+60
+41
+189
+57
+36
+193
+63
+41
+187
+58
+37
+179
+53
+31
+185
+58
+39
+192
+60
+47
+201
+58
+50
+215
+61
+61
+255
+95
+103
+255
+81
+100
+253
+67
+91
+246
+57
+87
+242
+57
+91
+242
+61
+96
+240
+64
+100
+224
+74
+101
+170
+64
+76
+131
+63
+62
+95
+58
+50
+72
+58
+47
+59
+61
+48
+59
+61
+50
+73
+59
+58
+85
+61
+61
+81
+47
+46
+84
+55
+47
+87
+75
+53
+100
+104
+69
+119
+143
+91
+140
+176
+112
+154
+195
+125
+159
+199
+129
+152
+186
+125
+154
+185
+128
+154
+182
+131
+141
+169
+120
+114
+142
+94
+89
+117
+69
+84
+112
+61
+92
+123
+66
+95
+127
+64
+98
+134
+64
+105
+141
+67
+109
+147
+72
+108
+148
+75
+107
+147
+76
+105
+144
+77
+105
+144
+77
+103
+140
+71
+101
+137
+67
+99
+134
+66
+99
+134
+68
+103
+138
+74
+105
+140
+76
+104
+140
+78
+103
+139
+77
+105
+141
+79
+105
+141
+77
+105
+142
+75
+103
+140
+71
+103
+140
+70
+102
+142
+69
+108
+146
+73
+109
+149
+76
+112
+156
+81
+111
+157
+82
+114
+158
+83
+45
+49
+34
+45
+49
+35
+44
+47
+38
+44
+46
+41
+47
+47
+45
+49
+49
+47
+51
+52
+47
+52
+53
+45
+57
+59
+48
+60
+62
+49
+64
+66
+55
+69
+72
+65
+75
+77
+76
+81
+82
+87
+85
+85
+97
+86
+87
+105
+92
+89
+116
+94
+93
+127
+102
+100
+140
+112
+110
+160
+122
+120
+183
+133
+131
+206
+141
+139
+223
+144
+144
+234
+144
+142
+239
+142
+140
+237
+138
+137
+231
+135
+132
+223
+129
+127
+211
+127
+124
+203
+127
+125
+200
+128
+127
+195
+134
+134
+196
+136
+136
+196
+138
+138
+198
+140
+139
+199
+140
+138
+201
+140
+136
+197
+140
+132
+191
+139
+130
+183
+137
+128
+175
+134
+124
+161
+128
+118
+145
+123
+112
+129
+117
+106
+114
+110
+100
+99
+105
+94
+88
+99
+93
+81
+93
+98
+76
+93
+98
+75
+97
+95
+74
+103
+92
+74
+109
+90
+73
+112
+91
+72
+114
+92
+71
+114
+92
+69
+122
+96
+73
+123
+87
+63
+137
+82
+61
+164
+85
+68
+199
+88
+79
+224
+86
+83
+245
+80
+84
+252
+79
+83
+226
+62
+60
+222
+60
+55
+221
+56
+52
+222
+55
+49
+225
+54
+47
+225
+54
+46
+221
+55
+43
+218
+55
+40
+212
+55
+38
+211
+56
+36
+211
+56
+38
+213
+56
+39
+216
+54
+41
+221
+53
+42
+224
+51
+44
+221
+53
+44
+203
+51
+40
+196
+54
+40
+194
+57
+41
+193
+60
+43
+194
+63
+45
+194
+63
+45
+193
+60
+43
+192
+56
+40
+195
+53
+39
+220
+74
+61
+218
+70
+58
+213
+65
+53
+206
+60
+47
+196
+54
+40
+196
+59
+43
+190
+54
+38
+198
+58
+41
+199
+58
+41
+199
+58
+41
+201
+58
+42
+202
+56
+41
+203
+55
+41
+204
+54
+40
+205
+51
+39
+213
+57
+45
+213
+55
+44
+214
+51
+42
+215
+51
+42
+218
+51
+43
+223
+54
+47
+229
+58
+51
+233
+60
+56
+240
+60
+61
+237
+52
+57
+235
+48
+55
+236
+49
+56
+238
+51
+60
+237
+52
+60
+235
+55
+64
+234
+61
+67
+221
+55
+59
+225
+65
+65
+236
+78
+75
+248
+89
+85
+253
+90
+85
+250
+81
+76
+239
+66
+62
+229
+56
+52
+226
+54
+50
+224
+55
+50
+224
+55
+50
+224
+55
+50
+225
+56
+53
+226
+57
+54
+228
+59
+56
+228
+59
+56
+225
+55
+55
+228
+56
+56
+230
+56
+58
+232
+56
+59
+235
+56
+60
+235
+56
+60
+235
+56
+60
+236
+56
+59
+239
+53
+56
+238
+52
+55
+236
+53
+55
+231
+55
+55
+226
+58
+55
+217
+58
+52
+207
+56
+47
+199
+55
+44
+194
+56
+43
+191
+58
+43
+189
+59
+43
+187
+60
+43
+187
+60
+43
+187
+60
+41
+187
+60
+43
+187
+60
+41
+184
+57
+38
+189
+64
+42
+179
+57
+36
+177
+54
+36
+182
+59
+43
+180
+49
+39
+194
+52
+48
+235
+80
+84
+255
+92
+105
+254
+75
+96
+243
+59
+85
+237
+57
+86
+238
+65
+93
+236
+73
+102
+227
+75
+100
+202
+79
+97
+130
+56
+57
+102
+62
+54
+85
+63
+50
+71
+64
+48
+59
+60
+44
+56
+54
+41
+65
+52
+43
+78
+55
+47
+72
+43
+35
+83
+60
+44
+103
+93
+66
+129
+136
+95
+146
+171
+116
+149
+188
+123
+148
+194
+122
+149
+192
+123
+146
+180
+120
+156
+184
+133
+154
+180
+133
+128
+154
+109
+92
+117
+75
+72
+98
+53
+78
+104
+56
+91
+120
+66
+95
+125
+63
+99
+131
+64
+104
+140
+68
+108
+146
+71
+106
+146
+73
+104
+146
+74
+103
+144
+76
+102
+143
+75
+100
+137
+68
+100
+135
+67
+99
+134
+68
+101
+136
+70
+104
+139
+75
+107
+142
+78
+107
+143
+79
+106
+142
+78
+105
+144
+79
+105
+144
+79
+105
+144
+77
+104
+144
+74
+103
+143
+72
+104
+146
+72
+108
+148
+75
+111
+153
+77
+115
+161
+86
+115
+163
+87
+117
+163
+88
+50
+52
+38
+48
+52
+38
+48
+49
+41
+48
+49
+43
+49
+50
+45
+50
+51
+46
+51
+52
+46
+52
+54
+43
+57
+59
+45
+59
+62
+45
+63
+65
+51
+68
+70
+57
+73
+74
+68
+77
+79
+78
+82
+81
+87
+83
+83
+93
+88
+86
+100
+92
+90
+111
+100
+97
+126
+110
+108
+148
+122
+119
+172
+132
+130
+195
+140
+137
+214
+145
+143
+227
+148
+145
+234
+147
+144
+235
+142
+139
+226
+137
+133
+217
+130
+127
+204
+127
+124
+195
+127
+124
+191
+128
+126
+189
+132
+131
+189
+134
+133
+190
+137
+136
+193
+141
+138
+193
+139
+136
+189
+137
+133
+183
+135
+127
+174
+133
+125
+166
+133
+123
+157
+128
+118
+143
+121
+110
+127
+114
+102
+112
+109
+97
+99
+107
+93
+90
+105
+90
+83
+99
+91
+78
+92
+97
+75
+90
+98
+74
+97
+95
+74
+103
+92
+74
+111
+89
+75
+115
+89
+74
+117
+90
+73
+119
+91
+70
+118
+86
+65
+123
+81
+59
+139
+81
+61
+171
+88
+70
+205
+91
+80
+226
+84
+80
+237
+71
+73
+239
+63
+65
+219
+50
+47
+220
+53
+47
+225
+53
+49
+227
+54
+48
+227
+53
+46
+225
+53
+43
+224
+54
+41
+219
+56
+41
+214
+55
+36
+211
+56
+36
+209
+56
+38
+212
+57
+39
+216
+54
+41
+220
+54
+42
+224
+51
+44
+218
+54
+45
+200
+54
+41
+189
+56
+39
+188
+55
+38
+189
+58
+40
+191
+62
+43
+194
+63
+45
+195
+59
+43
+196
+56
+41
+198
+52
+39
+233
+85
+73
+211
+60
+49
+204
+56
+44
+209
+66
+52
+190
+53
+37
+192
+61
+43
+192
+61
+43
+192
+56
+40
+196
+56
+39
+197
+57
+40
+199
+58
+41
+200
+57
+41
+203
+55
+41
+204
+54
+40
+205
+51
+39
+210
+54
+42
+212
+51
+41
+213
+50
+41
+219
+52
+44
+227
+58
+51
+233
+62
+55
+236
+63
+57
+236
+61
+58
+232
+52
+53
+236
+53
+57
+239
+54
+59
+238
+53
+59
+234
+50
+58
+230
+51
+57
+228
+55
+61
+226
+60
+64
+243
+85
+86
+252
+98
+98
+255
+109
+106
+255
+105
+100
+243
+86
+81
+228
+65
+60
+223
+54
+51
+221
+52
+47
+223
+54
+49
+222
+55
+49
+222
+55
+49
+223
+56
+50
+225
+56
+53
+226
+57
+54
+229
+57
+55
+230
+58
+56
+229
+55
+56
+230
+56
+57
+232
+56
+59
+233
+57
+60
+235
+56
+60
+235
+56
+60
+235
+56
+60
+236
+55
+60
+238
+53
+58
+238
+54
+56
+234
+54
+55
+229
+57
+55
+223
+60
+55
+214
+60
+52
+204
+57
+47
+197
+57
+44
+190
+57
+42
+186
+59
+42
+182
+59
+41
+181
+60
+41
+181
+60
+43
+180
+61
+41
+179
+59
+42
+179
+60
+40
+179
+58
+39
+183
+64
+44
+173
+56
+38
+173
+56
+39
+179
+59
+45
+171
+43
+34
+193
+53
+52
+252
+97
+103
+253
+85
+100
+249
+72
+92
+238
+62
+85
+232
+62
+88
+229
+73
+95
+220
+81
+100
+206
+81
+95
+177
+85
+90
+119
+70
+65
+92
+70
+57
+79
+66
+50
+74
+67
+49
+70
+67
+48
+64
+61
+42
+61
+54
+35
+61
+50
+30
+65
+50
+29
+81
+70
+42
+110
+107
+72
+138
+147
+102
+149
+172
+116
+145
+180
+116
+141
+184
+115
+144
+186
+120
+157
+187
+133
+161
+184
+138
+144
+167
+125
+108
+130
+91
+75
+95
+58
+65
+87
+48
+76
+99
+55
+87
+114
+63
+95
+123
+64
+100
+131
+64
+105
+138
+67
+107
+145
+70
+105
+145
+72
+103
+145
+71
+100
+143
+72
+101
+142
+74
+98
+135
+66
+99
+134
+66
+100
+135
+69
+103
+138
+72
+106
+141
+77
+108
+143
+79
+109
+145
+81
+110
+146
+82
+106
+145
+80
+106
+145
+78
+106
+146
+76
+104
+146
+74
+103
+145
+71
+105
+147
+71
+109
+151
+75
+112
+156
+79
+119
+166
+88
+118
+166
+90
+118
+166
+90
+55
+56
+40
+54
+56
+42
+54
+54
+44
+53
+54
+46
+53
+54
+48
+53
+54
+48
+54
+55
+47
+54
+56
+43
+59
+62
+45
+61
+64
+45
+64
+67
+46
+68
+71
+52
+73
+75
+62
+77
+78
+70
+81
+80
+78
+82
+82
+82
+86
+85
+83
+89
+88
+93
+97
+95
+108
+107
+105
+129
+117
+115
+155
+128
+125
+178
+136
+134
+199
+140
+138
+211
+149
+146
+225
+148
+145
+226
+144
+141
+220
+139
+135
+211
+132
+129
+196
+129
+125
+186
+127
+124
+181
+127
+124
+179
+129
+126
+181
+132
+129
+182
+135
+133
+183
+137
+134
+181
+138
+132
+176
+134
+128
+166
+129
+122
+155
+128
+119
+146
+127
+115
+135
+122
+110
+124
+114
+101
+108
+109
+95
+95
+106
+91
+88
+105
+90
+83
+106
+89
+79
+102
+90
+76
+97
+96
+76
+95
+97
+76
+100
+95
+76
+105
+92
+75
+110
+91
+76
+116
+90
+75
+122
+90
+75
+125
+90
+71
+127
+84
+65
+136
+81
+61
+157
+81
+65
+182
+86
+70
+205
+83
+72
+216
+72
+64
+223
+58
+56
+226
+52
+51
+221
+49
+45
+223
+51
+47
+226
+53
+47
+227
+53
+46
+225
+51
+44
+223
+51
+41
+221
+53
+40
+220
+57
+40
+211
+56
+36
+208
+57
+36
+207
+58
+38
+209
+58
+39
+212
+56
+41
+217
+55
+42
+221
+53
+44
+216
+55
+45
+196
+59
+43
+185
+58
+41
+181
+54
+37
+183
+56
+39
+189
+59
+43
+194
+61
+46
+199
+59
+46
+199
+55
+44
+208
+57
+48
+245
+92
+84
+214
+61
+53
+201
+53
+43
+207
+65
+53
+184
+51
+36
+183
+58
+40
+188
+63
+43
+191
+58
+41
+195
+58
+42
+198
+58
+43
+200
+58
+44
+202
+59
+45
+204
+58
+45
+207
+56
+45
+209
+55
+45
+208
+51
+42
+210
+49
+41
+214
+49
+43
+222
+55
+49
+229
+60
+55
+234
+62
+58
+232
+59
+55
+230
+55
+52
+233
+55
+53
+239
+59
+60
+240
+60
+63
+234
+54
+57
+228
+49
+53
+228
+53
+58
+232
+66
+70
+237
+77
+79
+255
+120
+119
+255
+113
+110
+241
+96
+91
+221
+74
+67
+209
+56
+51
+209
+50
+46
+220
+55
+51
+231
+64
+58
+224
+57
+51
+224
+57
+49
+224
+55
+50
+224
+55
+50
+226
+54
+50
+227
+55
+51
+229
+55
+54
+229
+55
+54
+230
+54
+56
+231
+55
+57
+234
+55
+59
+235
+56
+60
+235
+56
+62
+235
+56
+62
+232
+55
+61
+234
+55
+59
+238
+55
+59
+238
+55
+57
+234
+55
+58
+228
+58
+58
+223
+61
+58
+214
+61
+55
+203
+59
+50
+195
+59
+47
+186
+56
+42
+181
+58
+42
+179
+59
+42
+175
+60
+41
+175
+60
+42
+172
+60
+40
+172
+59
+41
+172
+59
+41
+170
+59
+40
+172
+61
+42
+166
+56
+39
+167
+57
+42
+170
+56
+45
+171
+48
+41
+203
+64
+67
+255
+105
+114
+243
+78
+94
+241
+72
+91
+235
+69
+89
+226
+73
+91
+215
+80
+94
+199
+85
+93
+178
+86
+87
+153
+90
+85
+103
+75
+63
+83
+74
+57
+80
+68
+52
+78
+67
+49
+73
+67
+45
+66
+64
+39
+63
+66
+35
+65
+71
+35
+77
+85
+46
+94
+103
+60
+120
+129
+84
+139
+153
+102
+145
+164
+109
+141
+169
+110
+143
+178
+114
+151
+185
+125
+157
+183
+136
+146
+167
+128
+117
+134
+100
+82
+99
+67
+63
+80
+48
+66
+83
+49
+79
+97
+57
+86
+108
+61
+98
+123
+66
+101
+130
+66
+105
+138
+67
+106
+144
+69
+105
+146
+70
+101
+145
+70
+98
+144
+72
+99
+142
+71
+98
+135
+66
+102
+134
+67
+103
+138
+72
+105
+140
+74
+107
+142
+78
+109
+144
+80
+110
+146
+82
+111
+147
+83
+106
+145
+78
+107
+146
+79
+106
+147
+77
+105
+147
+75
+105
+147
+73
+106
+150
+73
+110
+154
+75
+114
+158
+79
+120
+167
+89
+118
+167
+88
+118
+167
+88
+63
+61
+46
+61
+62
+46
+61
+61
+49
+61
+61
+51
+61
+61
+53
+59
+60
+52
+59
+61
+50
+59
+61
+47
+63
+66
+47
+64
+68
+45
+67
+71
+46
+70
+74
+51
+75
+76
+58
+78
+79
+65
+81
+81
+73
+82
+82
+72
+89
+87
+74
+90
+90
+78
+95
+94
+92
+103
+101
+114
+113
+110
+137
+123
+121
+161
+131
+128
+183
+135
+133
+196
+143
+140
+209
+143
+140
+211
+141
+138
+207
+138
+133
+199
+131
+127
+186
+126
+121
+175
+122
+119
+166
+121
+118
+165
+123
+119
+169
+124
+122
+171
+128
+125
+170
+131
+126
+166
+131
+125
+161
+127
+121
+149
+124
+116
+137
+122
+114
+129
+118
+107
+115
+114
+102
+104
+109
+95
+94
+106
+91
+86
+107
+90
+82
+108
+90
+80
+108
+90
+78
+107
+91
+78
+103
+94
+77
+102
+95
+77
+103
+94
+77
+106
+93
+77
+110
+93
+77
+118
+92
+77
+124
+92
+77
+131
+89
+73
+150
+94
+79
+157
+85
+71
+169
+77
+64
+185
+73
+61
+197
+64
+55
+204
+56
+46
+213
+50
+43
+221
+50
+43
+225
+53
+49
+225
+54
+47
+226
+53
+46
+226
+52
+45
+224
+50
+41
+222
+52
+39
+220
+54
+38
+218
+59
+40
+209
+57
+36
+205
+59
+36
+204
+59
+38
+206
+59
+39
+209
+58
+41
+213
+57
+42
+217
+55
+44
+211
+57
+45
+193
+62
+44
+180
+59
+40
+176
+53
+35
+178
+53
+35
+187
+57
+41
+196
+60
+46
+201
+59
+47
+203
+55
+45
+217
+63
+55
+248
+91
+84
+227
+73
+65
+206
+58
+48
+204
+64
+51
+184
+54
+38
+172
+51
+32
+181
+60
+41
+188
+57
+39
+191
+55
+39
+192
+55
+39
+195
+55
+40
+197
+55
+41
+201
+55
+42
+206
+55
+44
+209
+55
+45
+217
+60
+51
+219
+58
+50
+222
+57
+51
+229
+60
+55
+234
+62
+58
+234
+61
+57
+231
+56
+53
+227
+52
+49
+232
+57
+54
+235
+60
+57
+236
+58
+58
+232
+56
+58
+236
+62
+64
+248
+80
+80
+255
+98
+99
+255
+112
+112
+249
+104
+101
+226
+84
+80
+202
+61
+54
+192
+49
+43
+201
+52
+48
+214
+59
+55
+223
+61
+58
+224
+59
+55
+226
+59
+53
+225
+58
+50
+226
+57
+52
+225
+56
+51
+227
+55
+51
+228
+55
+51
+229
+53
+53
+230
+54
+54
+233
+54
+57
+233
+54
+57
+234
+55
+59
+235
+56
+60
+235
+56
+62
+234
+55
+61
+232
+55
+61
+233
+54
+58
+239
+56
+60
+236
+56
+57
+232
+56
+58
+227
+59
+58
+221
+62
+58
+211
+62
+55
+201
+60
+50
+192
+60
+47
+182
+56
+41
+178
+58
+41
+174
+59
+41
+170
+59
+40
+169
+60
+40
+168
+59
+39
+165
+58
+38
+165
+58
+40
+165
+60
+41
+160
+57
+40
+160
+59
+41
+160
+57
+42
+162
+54
+42
+181
+62
+56
+219
+84
+88
+249
+102
+112
+237
+76
+92
+237
+74
+93
+231
+76
+92
+216
+78
+91
+198
+83
+90
+177
+87
+86
+156
+92
+82
+136
+97
+82
+84
+71
+55
+77
+74
+57
+83
+70
+53
+77
+62
+43
+63
+51
+27
+57
+54
+23
+65
+77
+37
+78
+102
+54
+108
+138
+84
+119
+148
+92
+132
+155
+101
+137
+154
+100
+141
+155
+102
+144
+163
+107
+148
+173
+116
+152
+176
+124
+131
+149
+109
+110
+125
+92
+81
+96
+67
+60
+74
+48
+57
+70
+44
+65
+80
+49
+79
+95
+59
+87
+106
+61
+99
+122
+68
+101
+130
+66
+106
+139
+68
+107
+145
+70
+105
+146
+70
+101
+145
+70
+97
+143
+70
+99
+142
+71
+99
+136
+67
+105
+137
+70
+106
+141
+75
+108
+143
+77
+108
+143
+79
+108
+143
+79
+109
+145
+81
+110
+146
+82
+109
+148
+81
+109
+149
+79
+109
+150
+80
+108
+150
+76
+107
+151
+74
+109
+153
+74
+114
+159
+78
+115
+162
+81
+124
+173
+94
+123
+172
+93
+122
+171
+92
+68
+65
+48
+68
+66
+51
+68
+66
+54
+67
+67
+57
+67
+67
+59
+67
+67
+59
+66
+66
+54
+66
+67
+51
+68
+70
+48
+69
+72
+45
+71
+74
+45
+74
+77
+50
+79
+78
+57
+82
+81
+63
+84
+82
+69
+85
+83
+68
+92
+90
+67
+92
+92
+68
+92
+93
+79
+97
+97
+97
+105
+104
+120
+114
+113
+144
+123
+122
+166
+129
+126
+181
+134
+130
+191
+136
+131
+195
+136
+132
+193
+132
+129
+186
+127
+123
+174
+121
+115
+161
+116
+111
+151
+111
+109
+148
+112
+109
+154
+114
+111
+158
+118
+113
+154
+119
+115
+150
+119
+115
+142
+116
+111
+131
+115
+107
+120
+114
+105
+110
+109
+97
+97
+108
+95
+89
+106
+92
+83
+107
+90
+80
+109
+91
+79
+111
+91
+80
+111
+92
+78
+111
+92
+78
+110
+92
+78
+109
+93
+78
+107
+94
+78
+108
+95
+79
+111
+95
+79
+117
+96
+79
+125
+93
+78
+137
+89
+77
+161
+95
+83
+167
+79
+69
+174
+66
+56
+186
+59
+50
+197
+55
+45
+204
+50
+40
+212
+51
+41
+220
+53
+44
+224
+55
+48
+225
+54
+47
+225
+52
+45
+224
+51
+44
+224
+52
+42
+221
+53
+40
+216
+55
+37
+212
+57
+37
+207
+58
+34
+202
+61
+34
+201
+61
+36
+202
+62
+39
+205
+60
+41
+210
+59
+42
+213
+57
+44
+207
+59
+45
+191
+64
+45
+177
+60
+40
+172
+53
+33
+174
+51
+33
+186
+56
+40
+196
+60
+46
+202
+58
+47
+206
+53
+45
+216
+57
+51
+240
+78
+73
+241
+84
+77
+217
+66
+57
+204
+66
+53
+190
+63
+46
+166
+49
+29
+179
+60
+40
+190
+60
+44
+193
+57
+43
+193
+55
+42
+194
+54
+41
+197
+55
+43
+201
+57
+46
+207
+59
+49
+212
+59
+51
+225
+68
+61
+227
+65
+60
+228
+63
+59
+231
+62
+59
+233
+61
+59
+233
+59
+58
+232
+56
+56
+231
+56
+53
+231
+56
+53
+230
+57
+53
+230
+55
+52
+233
+59
+58
+244
+74
+74
+255
+92
+91
+255
+100
+99
+248
+99
+95
+204
+61
+57
+193
+56
+50
+189
+52
+46
+195
+56
+49
+213
+65
+61
+222
+69
+64
+223
+61
+59
+217
+52
+50
+226
+59
+53
+226
+59
+51
+226
+57
+52
+226
+57
+52
+228
+56
+52
+229
+56
+52
+231
+55
+55
+233
+55
+55
+234
+54
+57
+235
+55
+58
+235
+54
+59
+235
+56
+60
+235
+56
+62
+232
+55
+61
+232
+55
+61
+233
+54
+58
+235
+55
+58
+233
+54
+57
+230
+56
+57
+224
+59
+57
+219
+62
+57
+209
+62
+54
+198
+60
+49
+190
+60
+46
+179
+56
+41
+174
+59
+41
+170
+59
+40
+166
+59
+39
+164
+59
+40
+163
+58
+39
+163
+58
+39
+160
+57
+38
+161
+62
+43
+150
+55
+37
+156
+61
+43
+154
+57
+41
+154
+50
+39
+195
+80
+75
+237
+107
+109
+237
+93
+102
+235
+80
+94
+232
+75
+92
+220
+74
+87
+202
+77
+83
+182
+84
+83
+161
+93
+82
+142
+101
+81
+127
+106
+85
+78
+75
+56
+75
+72
+55
+80
+63
+47
+76
+55
+36
+69
+53
+27
+71
+71
+35
+87
+111
+61
+105
+146
+86
+127
+178
+111
+130
+179
+113
+131
+165
+104
+125
+146
+89
+131
+141
+89
+142
+150
+99
+137
+151
+100
+124
+140
+95
+88
+102
+67
+71
+84
+56
+57
+69
+45
+54
+66
+42
+58
+68
+44
+61
+74
+48
+74
+88
+55
+87
+104
+62
+101
+124
+70
+104
+130
+67
+108
+139
+69
+108
+144
+70
+105
+147
+71
+99
+145
+70
+97
+145
+71
+97
+143
+71
+102
+139
+70
+108
+140
+73
+109
+144
+78
+110
+145
+79
+108
+143
+79
+107
+142
+78
+107
+143
+79
+109
+145
+81
+112
+151
+84
+113
+153
+83
+112
+153
+83
+112
+154
+80
+111
+155
+78
+113
+157
+78
+116
+163
+82
+119
+166
+85
+126
+175
+96
+123
+174
+95
+121
+172
+93
+73
+67
+51
+74
+68
+54
+73
+69
+57
+73
+69
+58
+73
+71
+59
+73
+71
+59
+72
+70
+57
+72
+71
+53
+73
+72
+51
+74
+74
+50
+76
+76
+50
+78
+78
+52
+82
+80
+59
+84
+81
+62
+88
+82
+68
+89
+84
+65
+93
+89
+62
+91
+90
+62
+92
+89
+72
+94
+91
+84
+100
+97
+104
+110
+107
+126
+120
+115
+147
+125
+120
+160
+129
+123
+167
+131
+125
+171
+133
+127
+173
+131
+124
+166
+125
+119
+157
+117
+110
+143
+111
+105
+133
+107
+103
+130
+105
+102
+133
+106
+103
+134
+109
+104
+134
+109
+105
+128
+109
+105
+120
+108
+103
+110
+107
+98
+101
+106
+96
+94
+103
+93
+84
+104
+92
+80
+104
+90
+77
+107
+91
+76
+110
+93
+77
+113
+94
+79
+113
+94
+79
+112
+93
+78
+112
+93
+79
+111
+93
+79
+112
+93
+78
+115
+93
+79
+119
+93
+78
+126
+93
+78
+137
+91
+76
+147
+87
+76
+162
+84
+72
+166
+69
+60
+171
+57
+47
+186
+55
+45
+200
+56
+47
+211
+54
+45
+217
+54
+45
+221
+54
+45
+223
+54
+47
+223
+52
+45
+223
+52
+44
+223
+52
+44
+223
+55
+44
+221
+55
+41
+216
+54
+39
+209
+54
+36
+207
+58
+36
+204
+60
+36
+202
+60
+38
+203
+61
+39
+206
+59
+41
+209
+59
+42
+211
+58
+44
+206
+60
+45
+190
+65
+47
+175
+60
+39
+168
+51
+33
+172
+51
+32
+182
+57
+39
+193
+61
+46
+201
+59
+47
+204
+56
+46
+204
+50
+42
+224
+65
+59
+248
+91
+84
+224
+73
+64
+208
+68
+55
+202
+70
+55
+171
+50
+31
+184
+63
+44
+202
+70
+55
+204
+66
+53
+202
+64
+51
+203
+63
+50
+205
+63
+51
+210
+66
+55
+220
+69
+60
+225
+71
+63
+226
+64
+59
+226
+61
+57
+227
+58
+55
+226
+54
+52
+226
+54
+52
+227
+55
+53
+229
+57
+55
+229
+60
+57
+228
+63
+57
+224
+61
+54
+221
+58
+53
+225
+63
+58
+234
+77
+72
+234
+81
+76
+211
+64
+57
+184
+41
+35
+184
+45
+38
+190
+53
+45
+201
+62
+55
+208
+65
+59
+214
+62
+57
+217
+59
+56
+225
+59
+59
+231
+61
+61
+226
+57
+54
+226
+57
+54
+226
+57
+54
+228
+56
+54
+229
+57
+53
+231
+58
+54
+233
+57
+57
+234
+58
+58
+234
+56
+56
+234
+56
+56
+235
+56
+59
+235
+56
+59
+233
+57
+60
+232
+56
+59
+231
+55
+58
+231
+55
+58
+233
+54
+58
+230
+54
+56
+226
+56
+56
+222
+58
+56
+214
+61
+56
+204
+61
+53
+194
+60
+49
+185
+59
+45
+174
+57
+40
+170
+59
+42
+166
+59
+41
+162
+59
+40
+160
+59
+39
+158
+59
+38
+159
+58
+40
+155
+58
+39
+152
+63
+45
+140
+53
+34
+153
+61
+46
+152
+56
+42
+151
+47
+38
+205
+92
+88
+246
+122
+124
+222
+88
+95
+229
+89
+100
+217
+81
+91
+200
+77
+82
+183
+77
+79
+167
+87
+80
+155
+97
+85
+141
+104
+85
+128
+110
+86
+84
+84
+56
+67
+72
+42
+66
+57
+28
+72
+59
+27
+88
+80
+43
+110
+116
+68
+132
+162
+102
+148
+193
+126
+135
+188
+118
+134
+184
+115
+124
+158
+97
+110
+130
+77
+117
+126
+81
+130
+135
+94
+117
+125
+86
+91
+98
+64
+59
+68
+41
+52
+60
+37
+53
+61
+40
+61
+68
+50
+60
+69
+50
+57
+67
+43
+67
+80
+50
+85
+101
+62
+103
+123
+72
+105
+131
+70
+108
+139
+71
+109
+145
+71
+106
+147
+71
+102
+146
+71
+98
+144
+71
+99
+142
+71
+104
+141
+74
+108
+143
+77
+111
+146
+80
+110
+147
+80
+108
+143
+77
+105
+142
+75
+106
+143
+74
+106
+146
+76
+115
+155
+84
+115
+157
+85
+115
+157
+83
+114
+158
+81
+114
+158
+79
+115
+162
+82
+119
+166
+85
+122
+171
+90
+119
+167
+91
+117
+165
+91
+116
+164
+90
+82
+75
+59
+82
+75
+59
+82
+74
+61
+82
+74
+61
+82
+74
+61
+82
+74
+61
+82
+74
+61
+82
+75
+59
+85
+78
+60
+86
+79
+61
+87
+80
+62
+88
+81
+63
+89
+82
+64
+91
+84
+68
+92
+85
+69
+92
+85
+69
+98
+91
+72
+97
+90
+72
+97
+89
+76
+98
+89
+82
+101
+93
+91
+107
+97
+105
+113
+102
+116
+117
+106
+123
+122
+110
+132
+124
+112
+136
+127
+115
+139
+127
+115
+137
+124
+112
+132
+117
+106
+123
+109
+98
+114
+101
+93
+106
+99
+96
+105
+96
+95
+101
+95
+93
+98
+95
+90
+94
+94
+90
+89
+94
+89
+85
+97
+90
+82
+98
+90
+79
+101
+91
+79
+103
+91
+75
+105
+92
+75
+107
+92
+73
+107
+92
+71
+109
+92
+72
+109
+93
+70
+106
+94
+72
+106
+98
+79
+114
+101
+84
+113
+90
+74
+117
+79
+66
+139
+87
+74
+156
+92
+80
+162
+90
+76
+170
+91
+76
+164
+78
+61
+165
+70
+52
+166
+60
+44
+176
+56
+40
+194
+56
+45
+210
+56
+48
+221
+52
+49
+222
+49
+45
+223
+54
+47
+222
+55
+46
+222
+55
+46
+222
+55
+46
+222
+55
+46
+219
+55
+43
+216
+54
+41
+215
+55
+41
+213
+56
+41
+212
+56
+41
+210
+57
+41
+210
+57
+41
+210
+57
+43
+210
+57
+43
+212
+56
+43
+205
+59
+44
+189
+59
+43
+182
+62
+45
+174
+57
+40
+169
+49
+32
+171
+50
+33
+183
+57
+42
+192
+60
+47
+195
+57
+46
+200
+53
+43
+206
+53
+45
+212
+58
+48
+219
+67
+56
+221
+75
+62
+212
+72
+57
+194
+61
+44
+183
+50
+35
+221
+80
+70
+216
+74
+64
+212
+70
+60
+211
+69
+59
+215
+73
+63
+219
+72
+64
+221
+68
+62
+223
+61
+58
+223
+55
+52
+230
+56
+55
+234
+58
+58
+234
+58
+58
+229
+57
+55
+224
+55
+52
+222
+57
+51
+220
+61
+55
+220
+69
+62
+209
+65
+57
+199
+57
+47
+191
+50
+40
+185
+48
+38
+186
+52
+41
+191
+59
+47
+195
+63
+51
+195
+58
+48
+199
+61
+51
+208
+64
+55
+217
+64
+58
+224
+62
+59
+229
+60
+57
+233
+57
+57
+236
+58
+58
+230
+56
+58
+229
+56
+58
+229
+56
+58
+229
+57
+57
+229
+57
+55
+229
+57
+55
+229
+57
+53
+229
+57
+53
+224
+52
+48
+225
+53
+49
+228
+54
+53
+229
+55
+54
+230
+56
+57
+231
+57
+58
+231
+57
+58
+231
+57
+59
+235
+59
+62
+230
+57
+59
+223
+57
+57
+220
+61
+58
+214
+65
+61
+205
+66
+59
+193
+65
+54
+183
+63
+49
+169
+58
+41
+163
+60
+43
+160
+61
+42
+155
+60
+40
+153
+58
+38
+150
+58
+37
+151
+56
+38
+145
+56
+38
+144
+65
+48
+139
+60
+45
+135
+47
+35
+145
+47
+38
+188
+76
+74
+228
+109
+111
+229
+109
+111
+205
+86
+90
+189
+76
+78
+181
+78
+79
+170
+81
+77
+162
+85
+79
+155
+88
+79
+150
+93
+82
+149
+97
+84
+138
+106
+83
+88
+89
+47
+61
+75
+22
+56
+69
+15
+86
+97
+41
+127
+141
+80
+155
+176
+111
+161
+188
+121
+156
+189
+120
+146
+181
+115
+126
+157
+97
+104
+128
+76
+92
+109
+67
+89
+100
+66
+84
+93
+66
+72
+80
+57
+63
+68
+48
+58
+61
+44
+64
+67
+50
+60
+64
+49
+58
+62
+48
+60
+67
+51
+58
+67
+48
+65
+78
+50
+82
+100
+62
+93
+115
+66
+103
+131
+72
+112
+143
+75
+111
+147
+75
+108
+146
+71
+106
+146
+73
+105
+147
+75
+103
+144
+74
+108
+144
+80
+109
+145
+83
+111
+147
+83
+108
+147
+80
+109
+146
+77
+107
+147
+74
+109
+150
+74
+109
+152
+73
+113
+156
+76
+113
+158
+77
+114
+159
+78
+114
+161
+80
+116
+163
+82
+118
+167
+85
+121
+170
+89
+122
+170
+94
+123
+168
+101
+111
+155
+92
+101
+145
+82
+87
+78
+63
+87
+78
+63
+87
+78
+63
+87
+78
+63
+87
+78
+63
+87
+78
+63
+87
+78
+63
+87
+78
+63
+88
+79
+64
+89
+80
+65
+89
+80
+65
+91
+82
+67
+92
+83
+68
+93
+84
+69
+94
+85
+70
+95
+86
+71
+100
+91
+74
+99
+90
+73
+99
+89
+77
+99
+89
+79
+102
+91
+85
+106
+95
+93
+110
+98
+100
+112
+100
+104
+114
+101
+108
+116
+103
+112
+118
+105
+114
+118
+105
+114
+115
+102
+109
+109
+96
+103
+103
+91
+95
+98
+88
+89
+94
+91
+86
+90
+90
+82
+89
+86
+79
+87
+84
+75
+88
+84
+73
+88
+84
+72
+92
+86
+72
+94
+87
+71
+99
+90
+75
+99
+90
+73
+102
+91
+73
+103
+92
+72
+105
+93
+71
+106
+94
+70
+107
+95
+71
+106
+95
+73
+102
+97
+77
+111
+103
+84
+119
+91
+77
+129
+83
+70
+153
+86
+77
+168
+88
+79
+175
+82
+74
+180
+82
+69
+173
+73
+57
+170
+67
+48
+171
+61
+44
+177
+57
+41
+190
+56
+44
+204
+55
+48
+216
+52
+50
+220
+51
+48
+221
+54
+46
+220
+56
+46
+220
+56
+46
+220
+56
+46
+219
+55
+45
+218
+56
+45
+217
+55
+44
+215
+55
+43
+215
+55
+43
+213
+55
+43
+213
+55
+43
+213
+55
+43
+212
+56
+43
+212
+56
+43
+212
+56
+43
+206
+58
+44
+190
+60
+46
+182
+62
+46
+174
+57
+40
+166
+49
+32
+167
+50
+32
+178
+58
+41
+185
+62
+46
+190
+60
+46
+198
+58
+45
+199
+52
+42
+203
+52
+41
+210
+59
+48
+220
+69
+58
+225
+79
+66
+223
+81
+67
+221
+79
+67
+219
+70
+63
+214
+65
+59
+209
+60
+53
+208
+59
+52
+211
+62
+55
+215
+62
+56
+217
+58
+54
+218
+53
+51
+230
+56
+55
+234
+56
+56
+236
+56
+57
+234
+56
+56
+230
+56
+55
+226
+58
+55
+225
+62
+57
+219
+66
+58
+205
+64
+55
+194
+61
+52
+187
+57
+44
+180
+52
+39
+178
+52
+38
+181
+55
+41
+186
+60
+45
+191
+64
+49
+198
+64
+52
+205
+64
+54
+213
+65
+55
+220
+63
+56
+226
+58
+55
+230
+56
+55
+235
+55
+54
+239
+56
+58
+233
+54
+58
+231
+54
+60
+231
+55
+58
+230
+56
+57
+230
+56
+55
+229
+57
+53
+229
+57
+53
+227
+58
+53
+226
+57
+50
+227
+58
+51
+227
+58
+53
+228
+59
+54
+228
+59
+56
+228
+59
+56
+229
+57
+57
+229
+57
+57
+228
+58
+59
+227
+59
+59
+223
+60
+61
+217
+63
+61
+208
+65
+59
+196
+63
+54
+183
+61
+50
+172
+59
+45
+165
+59
+43
+160
+61
+42
+156
+61
+43
+151
+60
+41
+150
+59
+40
+146
+58
+38
+147
+56
+37
+140
+58
+37
+128
+57
+39
+128
+56
+41
+137
+53
+42
+157
+60
+53
+191
+81
+80
+215
+101
+101
+209
+94
+97
+183
+77
+77
+172
+78
+76
+164
+84
+77
+157
+89
+80
+152
+92
+81
+151
+94
+83
+151
+94
+83
+152
+95
+86
+140
+102
+81
+96
+95
+47
+83
+103
+42
+94
+114
+51
+122
+144
+79
+153
+175
+110
+165
+190
+124
+153
+178
+112
+136
+160
+98
+106
+130
+72
+97
+117
+66
+84
+101
+59
+74
+88
+55
+70
+80
+55
+63
+72
+53
+57
+63
+49
+53
+56
+45
+58
+60
+47
+65
+66
+52
+61
+63
+52
+58
+61
+50
+61
+65
+51
+58
+67
+48
+64
+77
+51
+82
+100
+62
+94
+116
+69
+103
+131
+72
+113
+144
+77
+112
+148
+76
+110
+146
+72
+107
+148
+72
+107
+147
+76
+104
+145
+75
+109
+145
+81
+110
+146
+84
+109
+148
+83
+109
+148
+81
+107
+147
+76
+107
+148
+72
+108
+151
+72
+109
+152
+72
+112
+157
+74
+112
+157
+74
+112
+160
+76
+115
+162
+81
+117
+166
+84
+120
+169
+88
+120
+169
+88
+120
+168
+94
+110
+152
+89
+100
+141
+83
+90
+131
+73
+93
+84
+69
+93
+84
+69
+93
+84
+69
+93
+84
+69
+93
+84
+69
+93
+84
+69
+93
+84
+69
+93
+84
+69
+91
+82
+67
+92
+83
+68
+93
+84
+69
+94
+85
+70
+95
+86
+71
+96
+87
+72
+97
+88
+73
+97
+88
+71
+101
+93
+74
+101
+93
+72
+100
+91
+74
+100
+91
+76
+101
+91
+81
+102
+91
+85
+104
+93
+89
+104
+93
+91
+105
+93
+93
+106
+94
+94
+107
+95
+95
+107
+95
+95
+105
+94
+92
+102
+91
+89
+98
+87
+83
+95
+86
+81
+90
+86
+77
+87
+84
+75
+85
+81
+72
+82
+78
+67
+81
+77
+66
+83
+79
+67
+87
+81
+67
+88
+82
+66
+94
+87
+71
+94
+87
+69
+97
+89
+70
+99
+91
+70
+103
+92
+72
+105
+94
+72
+107
+96
+74
+105
+97
+76
+101
+96
+77
+113
+101
+85
+123
+94
+80
+136
+88
+78
+162
+91
+85
+175
+88
+81
+177
+74
+69
+182
+71
+64
+182
+65
+55
+183
+63
+49
+182
+60
+47
+184
+56
+43
+189
+55
+43
+197
+57
+44
+204
+57
+47
+211
+57
+47
+217
+56
+46
+219
+55
+45
+219
+55
+45
+219
+57
+46
+218
+56
+45
+217
+55
+44
+217
+55
+44
+215
+55
+43
+215
+55
+43
+213
+55
+43
+213
+55
+43
+212
+56
+43
+212
+56
+43
+212
+56
+43
+210
+57
+43
+205
+59
+44
+192
+62
+48
+182
+62
+46
+173
+58
+40
+163
+50
+32
+163
+51
+31
+170
+58
+38
+179
+62
+44
+185
+62
+46
+196
+63
+48
+196
+56
+43
+197
+50
+40
+200
+52
+42
+208
+60
+48
+216
+70
+57
+220
+77
+63
+225
+78
+68
+216
+59
+54
+215
+53
+51
+210
+51
+48
+211
+53
+50
+216
+58
+55
+222
+63
+60
+227
+62
+60
+232
+60
+60
+236
+57
+60
+237
+54
+58
+234
+51
+55
+231
+51
+54
+230
+54
+56
+227
+57
+57
+224
+60
+58
+217
+64
+58
+193
+55
+45
+184
+56
+43
+179
+53
+39
+175
+52
+37
+175
+52
+37
+178
+55
+40
+182
+59
+43
+187
+61
+46
+200
+68
+53
+205
+67
+54
+213
+66
+56
+217
+63
+55
+223
+58
+52
+229
+56
+52
+234
+54
+53
+238
+55
+57
+234
+54
+57
+233
+54
+57
+233
+54
+57
+231
+55
+55
+231
+55
+55
+230
+57
+53
+229
+57
+53
+229
+58
+51
+227
+58
+51
+228
+59
+52
+228
+59
+54
+227
+60
+54
+227
+59
+56
+226
+58
+57
+225
+57
+57
+222
+56
+56
+221
+57
+58
+220
+60
+60
+218
+64
+62
+211
+66
+61
+200
+63
+57
+185
+58
+49
+173
+55
+43
+165
+55
+40
+161
+59
+44
+157
+60
+43
+153
+60
+43
+148
+59
+41
+147
+58
+40
+144
+57
+38
+144
+55
+37
+138
+57
+38
+122
+54
+35
+121
+54
+37
+136
+57
+44
+160
+70
+61
+185
+83
+79
+192
+87
+84
+184
+80
+79
+171
+73
+70
+162
+77
+72
+156
+83
+76
+153
+89
+80
+151
+94
+83
+151
+97
+87
+151
+97
+87
+152
+95
+86
+139
+101
+80
+115
+114
+70
+122
+141
+86
+147
+166
+110
+164
+185
+128
+171
+192
+135
+158
+179
+123
+124
+144
+91
+91
+111
+60
+63
+82
+36
+65
+83
+43
+65
+80
+47
+63
+76
+50
+58
+67
+48
+54
+60
+46
+54
+57
+48
+53
+56
+47
+57
+59
+46
+64
+65
+51
+61
+63
+52
+57
+60
+49
+61
+65
+51
+57
+66
+47
+64
+77
+51
+81
+99
+61
+96
+118
+71
+105
+133
+74
+115
+146
+79
+114
+150
+78
+112
+148
+74
+109
+150
+74
+109
+149
+78
+107
+148
+78
+112
+148
+84
+113
+149
+85
+111
+150
+83
+110
+150
+80
+108
+148
+75
+108
+149
+73
+108
+151
+72
+110
+153
+73
+112
+157
+76
+112
+157
+76
+112
+159
+78
+117
+164
+83
+120
+169
+88
+121
+170
+91
+117
+166
+87
+113
+160
+88
+95
+137
+74
+86
+127
+69
+79
+120
+62
+97
+88
+73
+97
+88
+73
+97
+88
+73
+97
+88
+73
+97
+88
+73
+97
+88
+73
+97
+88
+73
+97
+88
+73
+95
+86
+71
+96
+87
+72
+96
+87
+72
+97
+88
+73
+98
+89
+74
+99
+90
+75
+100
+91
+76
+100
+91
+74
+101
+93
+72
+102
+94
+71
+102
+94
+73
+103
+95
+76
+103
+94
+79
+102
+92
+80
+102
+92
+82
+102
+92
+83
+104
+93
+87
+104
+93
+87
+104
+93
+87
+104
+94
+85
+103
+93
+84
+101
+91
+81
+100
+90
+80
+99
+91
+78
+93
+89
+77
+90
+86
+74
+86
+82
+70
+82
+78
+66
+80
+76
+64
+80
+77
+62
+84
+78
+64
+85
+79
+63
+87
+81
+65
+89
+84
+65
+91
+86
+67
+93
+88
+68
+97
+90
+71
+100
+93
+74
+102
+95
+76
+102
+97
+77
+103
+97
+81
+111
+99
+85
+119
+91
+79
+138
+91
+81
+169
+98
+92
+182
+91
+88
+180
+71
+68
+183
+61
+58
+193
+61
+56
+195
+60
+54
+195
+58
+48
+193
+57
+45
+189
+56
+41
+189
+57
+42
+193
+61
+46
+202
+62
+47
+213
+57
+45
+217
+55
+44
+218
+56
+45
+217
+57
+45
+218
+56
+45
+216
+56
+44
+216
+56
+44
+213
+55
+43
+213
+55
+43
+212
+56
+43
+212
+56
+43
+212
+56
+43
+212
+56
+43
+212
+56
+43
+210
+57
+43
+205
+59
+44
+193
+63
+49
+182
+62
+46
+172
+57
+39
+162
+51
+32
+157
+51
+29
+162
+56
+34
+172
+61
+41
+181
+64
+46
+188
+63
+45
+191
+58
+43
+195
+55
+42
+197
+53
+42
+203
+55
+43
+206
+58
+46
+206
+60
+47
+211
+58
+50
+220
+55
+53
+223
+50
+52
+218
+50
+50
+218
+52
+52
+222
+56
+56
+226
+60
+60
+232
+62
+63
+235
+61
+62
+235
+56
+60
+235
+52
+56
+232
+49
+54
+229
+50
+53
+228
+54
+56
+224
+56
+55
+217
+55
+53
+204
+55
+49
+185
+51
+40
+177
+54
+39
+175
+53
+38
+174
+54
+38
+174
+54
+38
+176
+56
+40
+179
+58
+41
+181
+58
+42
+195
+65
+49
+202
+66
+52
+210
+66
+55
+217
+64
+56
+223
+60
+53
+227
+58
+53
+234
+56
+54
+236
+56
+55
+237
+54
+56
+235
+55
+56
+235
+55
+56
+234
+56
+54
+234
+56
+54
+232
+57
+52
+231
+58
+52
+230
+59
+52
+226
+57
+50
+225
+58
+50
+223
+58
+52
+224
+59
+55
+222
+58
+56
+220
+58
+56
+219
+57
+55
+217
+57
+57
+214
+60
+58
+213
+64
+60
+210
+67
+61
+202
+65
+59
+187
+59
+50
+175
+54
+43
+164
+54
+39
+158
+55
+40
+156
+59
+42
+152
+59
+41
+148
+59
+41
+146
+59
+40
+143
+58
+38
+141
+56
+36
+140
+55
+35
+135
+57
+37
+128
+61
+42
+118
+53
+35
+129
+53
+39
+153
+69
+58
+170
+80
+72
+172
+77
+71
+169
+76
+71
+166
+81
+76
+157
+80
+74
+152
+85
+76
+148
+90
+79
+148
+94
+82
+149
+97
+86
+149
+97
+86
+151
+97
+87
+141
+103
+84
+137
+133
+95
+153
+169
+120
+173
+189
+142
+166
+184
+136
+144
+161
+116
+115
+134
+89
+78
+96
+56
+47
+65
+27
+45
+62
+28
+51
+66
+37
+58
+70
+46
+61
+70
+51
+59
+65
+51
+58
+61
+50
+58
+61
+52
+60
+61
+53
+57
+57
+45
+63
+64
+50
+60
+62
+51
+57
+60
+49
+60
+64
+50
+57
+66
+47
+63
+76
+50
+80
+98
+60
+97
+119
+72
+106
+134
+75
+116
+147
+80
+115
+151
+79
+114
+150
+76
+111
+152
+76
+111
+151
+80
+109
+151
+79
+112
+151
+84
+115
+152
+85
+112
+152
+82
+111
+151
+80
+109
+150
+74
+109
+150
+72
+110
+153
+74
+112
+155
+75
+113
+158
+77
+114
+159
+78
+116
+163
+83
+121
+168
+88
+123
+172
+93
+119
+167
+91
+109
+157
+83
+101
+146
+77
+90
+132
+69
+82
+123
+65
+77
+118
+60
+99
+90
+75
+99
+90
+75
+99
+90
+75
+99
+90
+75
+99
+90
+75
+99
+90
+75
+99
+90
+75
+99
+90
+75
+99
+90
+75
+99
+90
+75
+100
+91
+76
+100
+91
+76
+101
+92
+77
+102
+93
+78
+102
+93
+78
+102
+93
+76
+102
+94
+71
+103
+95
+72
+104
+96
+73
+105
+97
+76
+105
+97
+78
+105
+96
+79
+104
+95
+80
+103
+94
+79
+106
+96
+84
+105
+96
+81
+105
+96
+81
+104
+95
+78
+104
+95
+78
+104
+96
+77
+104
+96
+77
+104
+97
+78
+100
+94
+78
+96
+90
+76
+91
+85
+71
+86
+80
+66
+80
+77
+62
+78
+75
+58
+78
+75
+58
+78
+75
+58
+80
+77
+60
+82
+79
+62
+84
+81
+64
+86
+83
+64
+88
+87
+67
+91
+90
+70
+93
+92
+72
+95
+92
+75
+99
+96
+81
+105
+93
+81
+112
+85
+74
+134
+91
+82
+172
+105
+99
+189
+100
+96
+191
+79
+77
+197
+67
+67
+205
+61
+61
+210
+58
+57
+209
+57
+52
+203
+56
+48
+194
+56
+43
+187
+60
+41
+184
+65
+43
+190
+65
+43
+208
+58
+43
+215
+55
+41
+216
+56
+42
+215
+58
+43
+217
+57
+43
+214
+57
+42
+214
+57
+42
+212
+56
+41
+212
+56
+41
+212
+56
+41
+212
+56
+41
+210
+57
+41
+210
+57
+41
+210
+57
+41
+210
+57
+41
+205
+59
+44
+193
+63
+49
+182
+62
+48
+171
+58
+40
+161
+54
+34
+154
+52
+30
+155
+55
+32
+163
+61
+38
+175
+66
+45
+179
+59
+42
+186
+59
+44
+194
+58
+44
+199
+57
+45
+203
+56
+46
+206
+58
+48
+208
+60
+48
+216
+59
+52
+232
+58
+60
+234
+53
+60
+228
+51
+57
+226
+51
+56
+223
+53
+56
+223
+53
+56
+225
+52
+56
+225
+51
+53
+233
+54
+60
+232
+53
+57
+231
+52
+58
+230
+56
+58
+226
+57
+60
+218
+56
+54
+206
+51
+49
+191
+48
+40
+181
+53
+40
+174
+57
+40
+174
+57
+40
+173
+58
+40
+173
+58
+40
+173
+58
+40
+173
+56
+38
+175
+55
+38
+184
+58
+43
+193
+59
+47
+205
+63
+51
+215
+64
+55
+221
+62
+56
+225
+60
+56
+231
+58
+54
+235
+57
+55
+237
+55
+54
+238
+54
+54
+238
+54
+54
+237
+55
+52
+234
+56
+52
+232
+58
+51
+231
+58
+51
+228
+60
+51
+225
+58
+50
+223
+59
+50
+223
+60
+53
+220
+61
+55
+219
+61
+58
+217
+62
+60
+215
+61
+59
+212
+62
+61
+207
+64
+60
+203
+66
+60
+197
+66
+58
+185
+61
+53
+173
+55
+45
+163
+53
+40
+158
+55
+40
+154
+58
+42
+150
+59
+41
+147
+60
+41
+145
+59
+42
+141
+58
+40
+138
+57
+38
+137
+56
+37
+136
+55
+36
+131
+56
+37
+131
+64
+45
+117
+52
+34
+123
+51
+37
+147
+71
+58
+164
+81
+73
+161
+78
+70
+158
+78
+71
+161
+87
+78
+152
+85
+76
+146
+88
+76
+144
+90
+78
+141
+92
+78
+143
+93
+82
+148
+96
+85
+151
+97
+87
+143
+104
+87
+141
+137
+102
+152
+165
+122
+157
+169
+129
+128
+142
+106
+93
+107
+72
+68
+83
+52
+50
+64
+38
+36
+50
+25
+45
+58
+38
+48
+59
+42
+53
+61
+46
+57
+63
+51
+60
+63
+52
+61
+63
+52
+58
+59
+51
+58
+58
+48
+57
+57
+45
+62
+63
+49
+59
+61
+50
+56
+59
+48
+59
+63
+49
+56
+65
+46
+62
+75
+49
+80
+98
+60
+98
+120
+73
+107
+135
+76
+117
+148
+81
+116
+152
+80
+115
+151
+77
+113
+154
+78
+113
+153
+82
+111
+153
+81
+114
+154
+83
+114
+154
+83
+114
+154
+81
+112
+153
+77
+109
+151
+75
+109
+152
+73
+112
+155
+76
+115
+158
+79
+116
+160
+81
+118
+162
+83
+120
+167
+89
+123
+169
+94
+122
+168
+95
+113
+159
+86
+100
+146
+74
+89
+134
+67
+92
+133
+73
+85
+124
+69
+81
+120
+65
+101
+92
+77
+101
+92
+77
+101
+92
+77
+101
+92
+77
+101
+92
+77
+101
+92
+77
+101
+92
+77
+101
+92
+77
+101
+92
+77
+102
+93
+78
+102
+93
+78
+102
+93
+78
+103
+94
+79
+103
+94
+79
+104
+95
+80
+104
+95
+78
+103
+95
+74
+104
+96
+73
+105
+97
+76
+106
+98
+77
+106
+98
+79
+106
+98
+79
+106
+97
+80
+106
+97
+80
+106
+97
+80
+105
+97
+78
+104
+96
+77
+104
+96
+75
+104
+96
+75
+104
+96
+73
+105
+97
+74
+106
+98
+75
+102
+95
+77
+98
+93
+74
+94
+88
+72
+88
+82
+66
+83
+77
+61
+77
+74
+57
+75
+72
+55
+73
+72
+54
+75
+74
+56
+76
+75
+57
+76
+77
+59
+78
+79
+61
+80
+81
+63
+81
+84
+65
+83
+86
+69
+84
+85
+69
+92
+88
+76
+95
+85
+73
+100
+80
+69
+124
+87
+78
+161
+104
+97
+181
+102
+97
+193
+88
+85
+211
+83
+82
+214
+65
+67
+220
+60
+62
+219
+57
+55
+210
+56
+48
+200
+58
+46
+189
+62
+43
+178
+66
+42
+183
+64
+40
+204
+59
+42
+212
+55
+40
+213
+56
+41
+213
+57
+42
+214
+57
+42
+213
+57
+42
+213
+57
+42
+212
+56
+41
+212
+56
+41
+210
+57
+41
+210
+57
+41
+210
+57
+41
+210
+57
+41
+210
+57
+41
+210
+57
+41
+205
+59
+44
+193
+63
+49
+181
+61
+47
+171
+60
+41
+162
+57
+36
+153
+54
+31
+149
+53
+29
+155
+59
+34
+167
+65
+42
+178
+66
+46
+185
+64
+47
+191
+59
+44
+195
+55
+42
+197
+50
+40
+203
+52
+43
+210
+59
+48
+223
+61
+56
+233
+54
+58
+237
+52
+60
+234
+55
+61
+232
+57
+62
+229
+59
+62
+228
+59
+62
+225
+59
+61
+224
+58
+60
+223
+53
+56
+224
+55
+58
+226
+57
+62
+224
+61
+62
+217
+61
+62
+207
+58
+54
+194
+51
+47
+181
+48
+39
+177
+57
+43
+172
+61
+42
+172
+61
+42
+171
+62
+42
+170
+61
+41
+169
+60
+40
+169
+58
+39
+171
+56
+37
+175
+54
+37
+183
+56
+41
+197
+59
+48
+206
+62
+51
+214
+61
+53
+222
+60
+55
+227
+59
+56
+232
+59
+55
+236
+56
+55
+239
+55
+53
+239
+55
+53
+238
+56
+53
+235
+58
+52
+233
+59
+52
+231
+60
+52
+228
+61
+52
+226
+62
+53
+224
+63
+55
+222
+65
+58
+218
+65
+59
+217
+65
+62
+213
+65
+63
+209
+64
+61
+205
+66
+63
+195
+63
+58
+187
+64
+56
+179
+61
+51
+170
+56
+45
+161
+53
+40
+155
+53
+39
+152
+56
+40
+149
+60
+42
+145
+60
+40
+141
+60
+41
+138
+60
+40
+136
+58
+38
+134
+57
+39
+132
+55
+37
+131
+54
+36
+127
+54
+37
+125
+58
+41
+116
+51
+33
+126
+57
+42
+151
+79
+65
+163
+89
+78
+156
+82
+71
+149
+79
+69
+152
+86
+74
+149
+89
+78
+144
+91
+77
+142
+90
+77
+140
+91
+77
+142
+92
+81
+147
+95
+84
+153
+96
+87
+145
+103
+87
+126
+120
+88
+121
+131
+94
+114
+124
+90
+85
+96
+66
+59
+69
+44
+47
+59
+37
+48
+59
+42
+48
+60
+46
+51
+61
+50
+52
+60
+49
+54
+60
+50
+60
+63
+54
+64
+65
+57
+63
+65
+54
+60
+60
+48
+55
+55
+43
+56
+57
+43
+62
+63
+49
+58
+60
+49
+55
+58
+47
+58
+62
+48
+55
+64
+45
+61
+74
+48
+79
+97
+59
+98
+120
+73
+107
+135
+76
+117
+148
+81
+117
+153
+81
+116
+152
+78
+113
+154
+78
+114
+154
+83
+112
+154
+82
+114
+154
+81
+115
+156
+80
+114
+155
+79
+112
+153
+75
+110
+153
+74
+112
+155
+76
+115
+158
+79
+118
+161
+82
+121
+165
+88
+123
+167
+90
+122
+168
+93
+120
+166
+93
+113
+159
+87
+103
+148
+79
+93
+138
+69
+88
+130
+66
+95
+134
+77
+87
+126
+71
+82
+121
+66
+103
+94
+79
+103
+94
+79
+103
+94
+79
+103
+94
+79
+103
+94
+79
+103
+94
+79
+103
+94
+79
+103
+94
+79
+103
+94
+79
+103
+94
+79
+103
+94
+79
+104
+95
+80
+104
+95
+80
+104
+95
+80
+104
+95
+80
+105
+96
+79
+106
+97
+80
+106
+98
+79
+106
+98
+79
+106
+98
+79
+105
+96
+79
+105
+96
+79
+105
+97
+78
+105
+97
+78
+105
+97
+78
+104
+96
+75
+104
+96
+75
+104
+96
+73
+104
+96
+73
+104
+97
+71
+104
+97
+71
+104
+97
+71
+102
+95
+76
+101
+94
+75
+98
+91
+73
+92
+87
+68
+87
+82
+63
+80
+77
+58
+76
+73
+56
+73
+72
+54
+73
+72
+54
+71
+72
+54
+71
+74
+57
+71
+75
+58
+72
+76
+59
+73
+77
+60
+72
+79
+63
+74
+78
+63
+82
+80
+67
+89
+81
+70
+92
+78
+67
+105
+82
+68
+129
+89
+77
+149
+87
+76
+174
+84
+76
+209
+91
+89
+217
+75
+74
+223
+65
+66
+223
+57
+57
+217
+55
+50
+207
+59
+49
+195
+62
+45
+183
+64
+42
+180
+60
+36
+201
+58
+41
+211
+55
+40
+212
+56
+41
+211
+58
+42
+213
+57
+42
+211
+58
+42
+211
+58
+42
+211
+58
+42
+210
+57
+41
+209
+58
+41
+209
+58
+41
+209
+58
+41
+209
+58
+41
+209
+58
+41
+209
+58
+41
+205
+59
+44
+193
+61
+48
+181
+61
+47
+172
+61
+44
+163
+60
+41
+152
+56
+32
+144
+52
+27
+149
+57
+32
+161
+65
+41
+173
+67
+45
+182
+65
+47
+191
+61
+47
+192
+54
+43
+194
+47
+37
+199
+48
+39
+208
+54
+46
+222
+58
+56
+232
+53
+57
+238
+54
+62
+236
+59
+65
+233
+64
+67
+229
+66
+69
+224
+66
+67
+220
+64
+65
+217
+63
+63
+204
+50
+50
+207
+55
+54
+211
+58
+60
+207
+62
+59
+199
+60
+57
+189
+56
+49
+180
+53
+46
+171
+53
+41
+170
+60
+45
+167
+62
+43
+167
+62
+43
+166
+63
+44
+165
+62
+43
+166
+61
+40
+166
+59
+39
+169
+58
+39
+170
+55
+37
+177
+56
+39
+188
+56
+43
+195
+57
+46
+203
+56
+48
+211
+58
+52
+220
+61
+57
+228
+63
+59
+233
+58
+55
+236
+57
+53
+236
+57
+53
+235
+58
+52
+233
+59
+52
+232
+59
+52
+229
+61
+52
+226
+62
+52
+224
+66
+55
+221
+67
+57
+218
+67
+60
+213
+66
+59
+207
+65
+61
+202
+63
+60
+199
+61
+59
+191
+62
+57
+177
+60
+51
+169
+58
+47
+162
+56
+43
+156
+54
+40
+152
+55
+39
+148
+56
+41
+145
+58
+41
+141
+58
+40
+139
+61
+41
+137
+60
+42
+135
+60
+41
+131
+58
+39
+130
+57
+40
+128
+55
+38
+127
+54
+37
+125
+54
+36
+120
+51
+35
+120
+53
+37
+133
+66
+50
+152
+85
+69
+157
+87
+75
+148
+80
+67
+144
+80
+68
+149
+90
+76
+147
+89
+77
+144
+90
+78
+144
+92
+81
+144
+92
+81
+146
+91
+84
+149
+92
+85
+152
+91
+86
+142
+98
+85
+107
+98
+69
+86
+96
+61
+74
+83
+52
+61
+71
+44
+54
+63
+42
+50
+61
+44
+52
+62
+51
+53
+63
+54
+54
+61
+54
+56
+63
+56
+61
+66
+59
+67
+70
+61
+69
+71
+60
+67
+68
+54
+64
+62
+47
+59
+57
+42
+55
+56
+42
+61
+62
+48
+58
+60
+49
+55
+58
+47
+58
+62
+48
+54
+63
+44
+61
+74
+48
+78
+96
+58
+97
+119
+72
+107
+135
+76
+117
+148
+81
+117
+153
+81
+116
+152
+78
+114
+155
+79
+114
+154
+83
+112
+154
+80
+113
+155
+79
+114
+157
+78
+113
+156
+77
+112
+155
+76
+111
+154
+75
+114
+157
+78
+117
+161
+84
+121
+165
+88
+127
+171
+96
+126
+169
+97
+122
+165
+93
+113
+156
+85
+102
+145
+76
+95
+137
+71
+93
+135
+69
+94
+136
+73
+97
+136
+79
+89
+128
+73
+82
+121
+66
+104
+95
+80
+104
+95
+80
+104
+95
+80
+104
+95
+80
+104
+95
+80
+104
+95
+80
+104
+95
+80
+104
+95
+80
+103
+94
+79
+104
+95
+80
+104
+95
+80
+104
+95
+80
+104
+95
+80
+104
+95
+80
+105
+96
+81
+105
+96
+81
+109
+100
+85
+108
+99
+84
+106
+97
+82
+105
+96
+81
+104
+95
+80
+103
+94
+79
+103
+94
+77
+104
+96
+77
+105
+97
+78
+105
+97
+76
+105
+97
+76
+105
+97
+76
+104
+96
+73
+104
+96
+73
+104
+97
+71
+104
+96
+73
+103
+97
+75
+102
+95
+76
+101
+94
+75
+98
+91
+72
+92
+87
+68
+85
+82
+63
+80
+77
+60
+77
+76
+58
+69
+70
+52
+68
+71
+52
+68
+72
+55
+68
+72
+55
+66
+73
+57
+66
+75
+58
+66
+75
+58
+67
+74
+58
+74
+74
+62
+84
+80
+68
+85
+79
+65
+89
+76
+60
+101
+75
+58
+115
+69
+53
+146
+74
+62
+192
+91
+83
+215
+83
+79
+222
+70
+69
+223
+59
+58
+220
+55
+53
+213
+59
+51
+204
+61
+47
+189
+60
+41
+184
+55
+34
+203
+58
+41
+207
+56
+39
+208
+57
+40
+210
+59
+42
+210
+59
+42
+210
+59
+42
+210
+59
+42
+210
+59
+42
+209
+58
+41
+209
+58
+41
+209
+58
+41
+209
+58
+41
+209
+58
+41
+209
+58
+41
+209
+58
+41
+205
+59
+44
+193
+59
+48
+182
+58
+46
+173
+60
+44
+167
+62
+43
+153
+57
+35
+143
+51
+26
+147
+55
+30
+159
+63
+39
+163
+57
+35
+176
+59
+41
+192
+62
+48
+198
+60
+49
+204
+56
+46
+208
+55
+47
+217
+60
+53
+227
+63
+61
+236
+61
+66
+238
+63
+68
+233
+67
+69
+226
+68
+67
+214
+64
+63
+202
+59
+55
+192
+53
+48
+187
+49
+46
+183
+48
+44
+187
+54
+49
+190
+58
+54
+187
+60
+54
+179
+58
+50
+169
+57
+46
+164
+56
+44
+160
+58
+43
+161
+61
+45
+159
+62
+43
+160
+63
+44
+161
+64
+45
+161
+64
+45
+163
+64
+43
+163
+62
+42
+164
+61
+42
+169
+59
+42
+173
+58
+40
+178
+55
+40
+184
+54
+41
+191
+53
+43
+201
+57
+48
+212
+63
+57
+224
+67
+62
+229
+60
+55
+232
+59
+53
+232
+59
+53
+231
+60
+52
+229
+60
+53
+228
+61
+52
+225
+62
+53
+222
+64
+53
+220
+68
+57
+216
+68
+58
+210
+67
+59
+202
+65
+57
+196
+63
+58
+188
+59
+54
+184
+56
+53
+176
+57
+51
+162
+55
+45
+153
+56
+40
+149
+53
+39
+147
+54
+39
+145
+58
+41
+143
+60
+42
+139
+58
+41
+133
+56
+38
+136
+61
+42
+133
+60
+43
+131
+60
+42
+128
+60
+41
+126
+58
+39
+124
+56
+37
+123
+54
+38
+123
+54
+38
+121
+49
+35
+128
+56
+42
+140
+71
+56
+150
+83
+67
+146
+80
+66
+139
+76
+61
+144
+82
+69
+153
+95
+83
+145
+87
+76
+146
+89
+78
+148
+91
+82
+150
+93
+84
+150
+93
+86
+151
+92
+86
+150
+89
+84
+140
+94
+81
+97
+88
+59
+69
+77
+40
+54
+64
+30
+56
+65
+38
+62
+71
+50
+60
+69
+52
+51
+61
+50
+45
+55
+46
+49
+56
+49
+55
+62
+54
+66
+69
+60
+71
+74
+63
+72
+73
+59
+66
+67
+49
+63
+62
+42
+59
+58
+38
+55
+56
+40
+61
+62
+48
+57
+59
+48
+54
+57
+46
+58
+62
+48
+54
+63
+44
+60
+73
+47
+78
+96
+58
+97
+119
+72
+106
+134
+75
+117
+148
+81
+116
+152
+80
+116
+152
+78
+114
+155
+79
+114
+154
+83
+112
+154
+80
+113
+156
+77
+113
+156
+76
+113
+156
+76
+112
+155
+75
+112
+155
+76
+115
+158
+79
+119
+163
+86
+123
+167
+92
+130
+173
+101
+128
+171
+100
+120
+163
+92
+106
+149
+80
+93
+135
+69
+89
+131
+65
+94
+136
+72
+101
+143
+80
+99
+138
+81
+90
+129
+74
+83
+122
+67
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+95
+83
+106
+96
+87
+106
+96
+87
+106
+96
+87
+106
+96
+87
+106
+96
+86
+106
+96
+86
+106
+96
+84
+106
+97
+82
+106
+97
+82
+106
+97
+80
+106
+97
+80
+106
+98
+79
+106
+98
+79
+106
+98
+79
+106
+98
+77
+106
+98
+77
+103
+95
+74
+103
+95
+74
+102
+94
+73
+101
+95
+73
+98
+93
+73
+90
+88
+67
+83
+80
+61
+77
+76
+58
+72
+73
+55
+69
+72
+55
+65
+69
+54
+64
+68
+53
+63
+69
+55
+63
+71
+56
+63
+71
+56
+63
+69
+55
+72
+74
+61
+74
+75
+61
+67
+68
+52
+75
+74
+54
+92
+81
+59
+96
+70
+47
+128
+75
+57
+189
+107
+93
+217
+104
+96
+224
+86
+83
+226
+71
+69
+229
+65
+64
+226
+64
+61
+215
+61
+53
+203
+59
+48
+201
+59
+45
+199
+51
+37
+203
+53
+38
+204
+54
+39
+205
+55
+40
+205
+55
+40
+206
+56
+41
+209
+59
+44
+211
+61
+46
+210
+60
+45
+210
+60
+45
+210
+60
+45
+210
+60
+45
+209
+59
+44
+209
+59
+44
+209
+59
+44
+206
+60
+45
+187
+50
+40
+182
+55
+46
+177
+59
+47
+168
+58
+41
+154
+55
+34
+148
+53
+31
+149
+55
+30
+156
+57
+34
+174
+65
+45
+179
+59
+43
+186
+54
+41
+193
+52
+42
+205
+54
+47
+215
+60
+55
+226
+67
+63
+234
+72
+69
+232
+68
+69
+232
+69
+72
+221
+67
+67
+201
+58
+54
+187
+54
+49
+180
+56
+48
+176
+55
+46
+169
+52
+43
+171
+57
+47
+169
+57
+46
+164
+56
+46
+160
+56
+45
+155
+57
+44
+150
+58
+43
+147
+60
+43
+146
+60
+43
+150
+61
+43
+152
+61
+42
+153
+62
+43
+154
+63
+44
+155
+64
+45
+156
+65
+44
+158
+66
+45
+161
+64
+45
+162
+59
+42
+165
+58
+40
+171
+55
+40
+176
+54
+41
+182
+54
+43
+190
+56
+45
+197
+58
+51
+204
+60
+52
+218
+61
+54
+224
+61
+54
+226
+63
+56
+226
+65
+55
+226
+65
+57
+222
+66
+54
+218
+64
+54
+215
+64
+53
+216
+72
+61
+210
+69
+59
+199
+65
+56
+187
+59
+50
+178
+53
+47
+170
+51
+45
+166
+49
+42
+159
+50
+43
+153
+57
+45
+146
+59
+42
+145
+57
+43
+141
+58
+42
+139
+58
+41
+136
+59
+41
+135
+59
+43
+133
+60
+43
+128
+57
+39
+125
+56
+40
+124
+57
+40
+124
+57
+40
+124
+57
+40
+123
+56
+39
+121
+54
+38
+120
+51
+36
+119
+45
+32
+139
+65
+52
+151
+79
+67
+147
+77
+65
+142
+76
+64
+145
+81
+69
+147
+85
+74
+142
+82
+71
+152
+92
+82
+152
+92
+82
+145
+85
+77
+144
+84
+76
+151
+90
+85
+149
+88
+83
+148
+87
+84
+147
+103
+90
+93
+84
+53
+73
+81
+42
+65
+75
+40
+66
+75
+44
+62
+72
+47
+55
+64
+43
+50
+61
+45
+52
+63
+49
+52
+60
+49
+72
+80
+67
+90
+94
+80
+87
+91
+74
+77
+79
+58
+68
+70
+46
+65
+65
+39
+61
+61
+37
+58
+59
+41
+62
+63
+49
+59
+61
+50
+58
+61
+50
+59
+63
+49
+52
+61
+42
+59
+72
+46
+80
+98
+60
+99
+121
+74
+108
+136
+77
+117
+148
+81
+115
+151
+79
+114
+150
+76
+112
+153
+77
+114
+154
+83
+113
+155
+81
+112
+157
+76
+113
+158
+75
+114
+159
+78
+114
+159
+78
+115
+159
+80
+118
+162
+85
+123
+167
+92
+127
+170
+98
+130
+173
+102
+120
+163
+94
+106
+147
+79
+96
+137
+71
+94
+135
+69
+97
+137
+74
+102
+142
+80
+104
+144
+84
+100
+137
+83
+91
+128
+76
+84
+121
+69
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+95
+83
+106
+95
+89
+106
+95
+91
+106
+95
+91
+106
+95
+89
+106
+95
+89
+106
+96
+87
+106
+96
+86
+106
+96
+84
+106
+96
+84
+106
+97
+82
+106
+97
+82
+106
+97
+82
+106
+97
+82
+106
+97
+82
+106
+97
+80
+106
+97
+80
+104
+96
+77
+104
+96
+75
+103
+95
+74
+103
+95
+74
+100
+93
+74
+94
+89
+69
+85
+82
+63
+79
+78
+58
+73
+74
+58
+69
+72
+55
+66
+68
+54
+64
+68
+53
+63
+69
+55
+62
+70
+55
+62
+70
+55
+61
+69
+54
+66
+70
+56
+65
+67
+53
+64
+69
+49
+72
+76
+53
+77
+73
+48
+82
+65
+39
+124
+82
+58
+185
+117
+98
+201
+100
+88
+221
+96
+90
+234
+86
+84
+230
+72
+71
+226
+64
+62
+226
+64
+61
+219
+62
+57
+209
+56
+48
+205
+57
+43
+206
+61
+44
+207
+61
+46
+207
+62
+45
+207
+59
+45
+206
+59
+43
+205
+57
+43
+205
+58
+42
+206
+58
+44
+208
+58
+43
+208
+58
+44
+208
+58
+43
+208
+58
+44
+208
+58
+43
+208
+58
+44
+205
+59
+46
+201
+63
+53
+197
+66
+58
+188
+66
+55
+174
+61
+47
+159
+54
+35
+150
+49
+29
+150
+49
+29
+155
+50
+29
+168
+53
+35
+180
+54
+40
+195
+59
+47
+209
+65
+56
+222
+69
+63
+230
+73
+68
+233
+74
+70
+234
+75
+72
+224
+66
+65
+219
+69
+68
+208
+66
+62
+190
+59
+51
+175
+57
+47
+171
+61
+48
+165
+63
+49
+159
+61
+48
+159
+63
+49
+156
+62
+50
+151
+62
+48
+149
+61
+47
+143
+61
+47
+139
+62
+46
+135
+64
+46
+136
+63
+44
+142
+61
+42
+143
+60
+42
+146
+60
+43
+145
+62
+44
+148
+63
+43
+148
+63
+43
+150
+63
+44
+153
+62
+44
+159
+64
+46
+161
+61
+45
+164
+58
+44
+168
+56
+44
+173
+55
+43
+178
+56
+45
+184
+57
+48
+189
+56
+47
+202
+60
+50
+208
+60
+50
+211
+63
+53
+213
+65
+55
+215
+67
+57
+214
+67
+57
+212
+68
+57
+209
+69
+56
+202
+66
+54
+195
+65
+52
+185
+61
+51
+176
+58
+48
+169
+54
+47
+164
+53
+46
+159
+52
+44
+153
+55
+44
+146
+58
+46
+140
+61
+44
+138
+59
+44
+136
+59
+43
+134
+58
+42
+132
+59
+42
+131
+60
+42
+129
+60
+44
+126
+59
+42
+124
+59
+41
+123
+57
+41
+121
+58
+41
+120
+57
+40
+119
+56
+39
+117
+54
+39
+119
+52
+36
+128
+52
+39
+144
+68
+55
+152
+78
+67
+145
+75
+63
+140
+74
+62
+143
+81
+68
+146
+84
+73
+144
+82
+71
+147
+83
+74
+152
+88
+79
+152
+85
+79
+151
+86
+80
+156
+93
+88
+148
+87
+82
+142
+83
+79
+138
+99
+84
+93
+87
+53
+88
+99
+57
+95
+106
+66
+90
+102
+66
+73
+84
+54
+54
+67
+41
+52
+64
+42
+60
+72
+52
+79
+88
+71
+89
+98
+81
+95
+102
+84
+87
+92
+70
+74
+78
+55
+66
+69
+42
+63
+63
+35
+60
+60
+34
+57
+58
+40
+61
+62
+48
+58
+60
+49
+57
+60
+49
+60
+64
+50
+53
+62
+43
+59
+72
+46
+80
+98
+60
+100
+122
+75
+108
+136
+77
+117
+148
+81
+116
+152
+80
+114
+150
+76
+113
+154
+78
+114
+154
+83
+113
+155
+81
+115
+160
+79
+114
+159
+76
+112
+157
+76
+113
+158
+77
+116
+160
+81
+120
+164
+87
+124
+167
+95
+127
+170
+99
+123
+166
+97
+111
+154
+85
+99
+140
+74
+93
+134
+68
+97
+137
+74
+101
+141
+78
+101
+141
+78
+99
+139
+79
+100
+137
+83
+91
+128
+76
+84
+121
+69
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+95
+85
+106
+95
+91
+106
+94
+94
+106
+94
+94
+106
+95
+93
+106
+95
+89
+106
+96
+87
+106
+96
+86
+106
+96
+84
+106
+96
+84
+106
+96
+84
+106
+96
+84
+106
+96
+84
+106
+96
+84
+106
+96
+84
+106
+96
+86
+106
+96
+84
+108
+97
+79
+107
+96
+76
+105
+97
+78
+105
+97
+78
+102
+95
+76
+97
+92
+72
+89
+86
+67
+83
+82
+62
+77
+75
+60
+72
+73
+57
+68
+70
+56
+65
+69
+54
+65
+69
+54
+63
+70
+54
+62
+68
+54
+61
+67
+53
+62
+69
+53
+58
+62
+45
+66
+71
+49
+73
+75
+51
+69
+63
+37
+84
+64
+39
+132
+92
+67
+181
+116
+96
+179
+87
+74
+214
+100
+90
+239
+101
+98
+236
+84
+83
+230
+70
+72
+235
+71
+72
+232
+66
+68
+219
+57
+54
+203
+55
+43
+201
+58
+42
+201
+58
+44
+201
+58
+42
+203
+57
+44
+202
+56
+41
+200
+54
+41
+200
+54
+39
+202
+56
+43
+203
+55
+41
+203
+55
+43
+203
+55
+41
+203
+55
+43
+204
+56
+42
+204
+56
+44
+203
+56
+46
+194
+51
+45
+190
+53
+47
+182
+54
+45
+173
+51
+40
+161
+48
+34
+158
+47
+30
+160
+49
+32
+167
+51
+36
+188
+65
+50
+199
+67
+55
+214
+71
+63
+225
+76
+70
+231
+76
+71
+233
+74
+70
+229
+70
+66
+223
+68
+64
+216
+66
+65
+209
+67
+65
+195
+63
+58
+177
+59
+49
+166
+60
+47
+161
+65
+49
+156
+69
+52
+152
+69
+51
+149
+68
+51
+146
+67
+52
+143
+66
+50
+138
+65
+48
+133
+64
+48
+130
+65
+47
+126
+65
+46
+129
+64
+46
+132
+59
+42
+136
+59
+43
+137
+58
+41
+137
+60
+42
+139
+60
+43
+139
+60
+43
+142
+61
+42
+143
+60
+42
+150
+63
+46
+152
+60
+45
+155
+59
+43
+158
+56
+42
+162
+56
+43
+167
+56
+45
+170
+58
+46
+175
+57
+47
+185
+57
+46
+190
+57
+48
+193
+59
+48
+196
+62
+51
+197
+63
+51
+197
+65
+52
+195
+65
+51
+193
+65
+52
+182
+59
+44
+178
+58
+44
+170
+56
+45
+163
+55
+43
+158
+54
+43
+155
+54
+44
+152
+55
+46
+148
+58
+47
+141
+59
+47
+136
+60
+44
+135
+59
+45
+132
+59
+44
+130
+58
+43
+128
+59
+43
+128
+59
+43
+127
+60
+44
+125
+59
+43
+122
+59
+42
+122
+59
+44
+119
+57
+42
+118
+56
+41
+117
+55
+40
+116
+54
+41
+118
+52
+38
+136
+59
+49
+148
+70
+60
+150
+78
+66
+142
+74
+61
+136
+72
+60
+141
+79
+66
+145
+83
+72
+146
+82
+73
+146
+79
+73
+153
+84
+79
+153
+83
+81
+154
+86
+83
+154
+93
+90
+147
+89
+85
+141
+91
+84
+141
+108
+91
+129
+125
+88
+126
+137
+94
+128
+139
+97
+108
+120
+82
+76
+88
+52
+54
+68
+35
+61
+74
+46
+76
+90
+64
+101
+113
+89
+101
+111
+87
+93
+101
+77
+80
+85
+62
+69
+73
+48
+63
+67
+40
+61
+64
+35
+58
+60
+36
+56
+57
+39
+59
+60
+46
+56
+58
+47
+57
+60
+49
+61
+65
+51
+54
+63
+44
+60
+73
+47
+80
+98
+60
+100
+122
+75
+109
+137
+78
+118
+149
+82
+116
+152
+80
+115
+151
+77
+113
+154
+78
+114
+154
+83
+112
+154
+80
+117
+162
+81
+112
+160
+76
+110
+157
+76
+112
+159
+79
+117
+164
+86
+121
+167
+92
+125
+168
+96
+124
+167
+96
+112
+153
+85
+102
+143
+77
+92
+132
+69
+92
+132
+69
+101
+140
+77
+105
+144
+81
+102
+141
+78
+95
+133
+72
+99
+136
+82
+90
+127
+76
+83
+120
+69
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+106
+97
+82
+106
+97
+82
+106
+97
+82
+106
+97
+82
+106
+97
+82
+106
+97
+82
+106
+97
+82
+106
+96
+86
+107
+96
+92
+107
+95
+95
+107
+96
+94
+107
+96
+92
+107
+96
+90
+107
+97
+88
+107
+97
+87
+107
+97
+85
+107
+97
+85
+107
+97
+85
+107
+97
+85
+107
+97
+85
+107
+97
+87
+107
+97
+87
+107
+97
+88
+107
+97
+87
+110
+98
+82
+109
+98
+80
+106
+98
+79
+106
+98
+79
+104
+97
+78
+101
+94
+75
+95
+90
+71
+89
+86
+69
+82
+79
+62
+77
+75
+60
+71
+72
+58
+68
+70
+56
+67
+69
+55
+66
+68
+54
+64
+68
+53
+62
+66
+51
+63
+70
+52
+60
+65
+45
+71
+73
+51
+76
+70
+48
+77
+59
+37
+110
+78
+57
+152
+100
+79
+167
+96
+78
+158
+66
+53
+197
+84
+76
+229
+100
+95
+239
+95
+94
+237
+83
+85
+237
+74
+79
+234
+68
+72
+227
+64
+65
+205
+56
+49
+199
+57
+45
+197
+55
+43
+197
+55
+43
+200
+56
+45
+202
+58
+47
+203
+59
+48
+205
+58
+48
+209
+62
+52
+209
+62
+52
+210
+62
+52
+210
+62
+52
+211
+63
+53
+211
+63
+53
+211
+63
+53
+211
+62
+55
+211
+63
+59
+209
+66
+62
+203
+68
+62
+198
+70
+61
+194
+70
+60
+195
+73
+62
+199
+77
+64
+206
+80
+68
+217
+83
+72
+221
+80
+71
+226
+77
+71
+228
+73
+69
+228
+71
+66
+226
+67
+63
+224
+65
+61
+220
+65
+61
+214
+69
+66
+202
+67
+63
+189
+62
+55
+173
+59
+48
+161
+61
+46
+155
+66
+48
+151
+70
+51
+148
+73
+54
+142
+69
+52
+140
+69
+51
+138
+66
+51
+133
+66
+49
+130
+64
+48
+125
+64
+46
+123
+64
+46
+124
+63
+45
+128
+59
+44
+131
+57
+44
+131
+58
+43
+132
+59
+44
+132
+59
+44
+133
+60
+45
+135
+59
+43
+136
+59
+43
+137
+58
+43
+140
+57
+41
+143
+55
+41
+147
+55
+42
+150
+56
+44
+156
+58
+47
+160
+59
+47
+163
+59
+48
+170
+58
+47
+173
+56
+46
+175
+57
+47
+176
+58
+46
+176
+58
+46
+176
+58
+44
+175
+57
+43
+174
+56
+42
+168
+55
+41
+165
+55
+40
+158
+54
+41
+155
+54
+42
+149
+55
+43
+146
+56
+45
+145
+57
+47
+142
+60
+48
+136
+60
+46
+133
+60
+45
+131
+59
+44
+129
+57
+42
+127
+58
+42
+126
+57
+42
+125
+58
+42
+125
+59
+43
+124
+58
+44
+122
+59
+44
+121
+59
+44
+119
+57
+42
+115
+56
+42
+113
+54
+40
+114
+55
+41
+117
+53
+41
+140
+68
+56
+146
+72
+61
+145
+75
+63
+138
+72
+58
+135
+73
+60
+139
+79
+68
+147
+84
+75
+151
+84
+76
+150
+81
+76
+155
+84
+80
+152
+81
+79
+148
+83
+79
+150
+92
+88
+144
+95
+88
+144
+104
+94
+151
+126
+106
+148
+148
+112
+133
+146
+102
+117
+130
+87
+89
+104
+63
+67
+82
+43
+63
+79
+42
+80
+96
+60
+99
+114
+81
+101
+116
+85
+92
+105
+75
+78
+88
+61
+67
+76
+49
+63
+69
+43
+62
+66
+41
+61
+65
+40
+59
+61
+39
+55
+56
+40
+58
+59
+45
+55
+57
+46
+57
+60
+49
+61
+65
+51
+55
+64
+45
+60
+73
+47
+79
+97
+59
+98
+120
+73
+108
+136
+77
+118
+149
+82
+117
+153
+81
+116
+152
+78
+114
+155
+79
+114
+154
+83
+111
+155
+80
+113
+160
+79
+111
+158
+77
+111
+158
+77
+115
+162
+82
+122
+168
+93
+124
+170
+97
+122
+165
+94
+117
+160
+91
+99
+140
+74
+94
+135
+69
+91
+131
+68
+95
+135
+72
+103
+142
+79
+106
+145
+80
+102
+141
+76
+96
+135
+72
+98
+135
+81
+89
+126
+75
+82
+119
+68
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+106
+97
+82
+106
+97
+82
+106
+97
+82
+106
+97
+82
+106
+97
+82
+106
+97
+82
+106
+97
+82
+106
+96
+84
+107
+96
+90
+107
+96
+92
+107
+96
+90
+107
+97
+88
+107
+97
+87
+107
+97
+85
+107
+98
+83
+107
+98
+83
+107
+98
+83
+107
+98
+83
+107
+98
+83
+107
+97
+85
+107
+97
+87
+107
+97
+87
+107
+97
+88
+107
+97
+87
+111
+99
+85
+110
+98
+82
+107
+98
+81
+107
+98
+81
+107
+98
+81
+104
+97
+79
+100
+93
+77
+96
+90
+74
+88
+82
+66
+82
+79
+62
+78
+75
+60
+73
+71
+56
+71
+69
+54
+68
+69
+53
+66
+67
+51
+63
+66
+49
+64
+72
+49
+65
+70
+47
+77
+71
+49
+83
+62
+43
+101
+62
+45
+148
+90
+76
+170
+96
+83
+153
+63
+52
+155
+52
+43
+179
+64
+57
+214
+89
+85
+241
+106
+103
+245
+101
+101
+235
+82
+85
+232
+73
+78
+233
+77
+80
+217
+73
+65
+211
+70
+60
+205
+64
+54
+203
+62
+52
+206
+64
+54
+210
+68
+58
+213
+71
+61
+215
+71
+62
+218
+74
+65
+218
+74
+65
+221
+74
+66
+221
+74
+66
+222
+75
+67
+222
+75
+67
+224
+75
+68
+224
+75
+69
+235
+83
+82
+232
+84
+84
+227
+83
+82
+220
+82
+79
+216
+83
+76
+216
+83
+76
+219
+85
+76
+224
+85
+78
+224
+76
+72
+225
+73
+70
+227
+69
+66
+226
+67
+64
+228
+66
+64
+226
+67
+64
+228
+69
+66
+224
+70
+68
+218
+73
+70
+203
+68
+64
+188
+61
+55
+174
+60
+50
+163
+62
+50
+153
+66
+49
+147
+68
+51
+146
+71
+52
+141
+68
+51
+138
+66
+51
+137
+65
+51
+132
+63
+48
+130
+62
+49
+128
+62
+48
+125
+62
+47
+125
+62
+47
+127
+59
+46
+128
+58
+46
+128
+58
+46
+128
+58
+46
+128
+61
+45
+129
+60
+45
+129
+60
+45
+131
+59
+45
+130
+57
+42
+132
+56
+42
+134
+56
+43
+138
+56
+42
+140
+57
+43
+144
+58
+45
+146
+58
+46
+148
+58
+47
+155
+59
+47
+158
+57
+45
+159
+57
+45
+160
+58
+44
+161
+57
+44
+162
+56
+43
+162
+56
+42
+162
+56
+42
+159
+56
+41
+156
+56
+41
+152
+56
+40
+148
+56
+41
+143
+57
+42
+140
+58
+44
+137
+58
+45
+135
+59
+45
+132
+58
+45
+130
+58
+44
+129
+57
+43
+128
+56
+42
+125
+56
+41
+125
+55
+43
+124
+56
+43
+123
+57
+43
+122
+56
+44
+121
+57
+45
+120
+58
+45
+118
+56
+43
+113
+53
+42
+111
+53
+41
+113
+55
+43
+116
+57
+43
+140
+72
+59
+141
+73
+60
+137
+73
+61
+132
+73
+59
+133
+75
+63
+140
+82
+70
+147
+87
+77
+152
+88
+79
+152
+81
+77
+156
+85
+81
+152
+82
+80
+147
+86
+81
+146
+96
+89
+136
+98
+87
+131
+103
+91
+134
+122
+100
+110
+114
+81
+90
+105
+64
+74
+89
+48
+65
+82
+40
+73
+90
+48
+87
+105
+63
+100
+118
+78
+106
+124
+86
+88
+105
+69
+76
+91
+58
+63
+76
+46
+58
+68
+41
+60
+68
+44
+62
+67
+45
+60
+65
+45
+58
+61
+44
+56
+57
+43
+58
+59
+45
+54
+56
+45
+56
+59
+48
+62
+66
+52
+55
+64
+45
+59
+72
+46
+76
+94
+56
+95
+117
+70
+105
+133
+74
+116
+147
+80
+116
+152
+80
+116
+152
+78
+114
+155
+79
+115
+155
+84
+112
+156
+81
+110
+157
+77
+109
+158
+76
+112
+161
+80
+119
+168
+89
+124
+170
+97
+122
+168
+96
+114
+157
+88
+105
+147
+81
+90
+131
+65
+92
+132
+69
+97
+136
+73
+101
+140
+77
+103
+142
+77
+103
+142
+75
+104
+141
+74
+102
+138
+76
+99
+134
+80
+89
+123
+73
+82
+116
+66
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+107
+98
+83
+107
+98
+83
+107
+98
+83
+107
+98
+83
+107
+98
+83
+107
+98
+83
+107
+98
+83
+107
+97
+85
+108
+98
+89
+108
+98
+89
+108
+98
+89
+108
+98
+86
+108
+98
+86
+108
+99
+82
+108
+99
+82
+108
+100
+81
+108
+100
+81
+108
+100
+81
+108
+99
+82
+108
+99
+84
+108
+98
+86
+108
+98
+88
+108
+98
+88
+108
+98
+88
+111
+99
+85
+110
+98
+82
+107
+98
+81
+108
+99
+82
+108
+99
+82
+107
+98
+81
+103
+96
+80
+100
+93
+77
+94
+87
+71
+89
+83
+67
+83
+77
+63
+77
+74
+59
+75
+72
+57
+71
+69
+54
+69
+66
+51
+64
+65
+47
+61
+71
+46
+66
+70
+45
+81
+66
+45
+98
+61
+45
+129
+69
+58
+169
+89
+82
+178
+79
+74
+155
+46
+43
+175
+60
+57
+184
+62
+59
+208
+84
+82
+242
+112
+110
+254
+118
+118
+243
+100
+104
+237
+88
+94
+242
+93
+95
+227
+85
+81
+218
+80
+70
+212
+71
+64
+208
+67
+58
+209
+68
+61
+212
+71
+62
+214
+71
+65
+214
+71
+63
+217
+72
+67
+218
+74
+66
+220
+72
+68
+221
+74
+67
+222
+74
+70
+222
+75
+68
+224
+75
+71
+224
+75
+71
+226
+72
+72
+225
+71
+73
+220
+72
+72
+217
+71
+71
+214
+72
+68
+215
+72
+68
+216
+71
+66
+219
+70
+66
+224
+66
+65
+228
+65
+66
+230
+66
+65
+232
+66
+66
+231
+67
+66
+228
+66
+64
+223
+65
+62
+219
+65
+63
+221
+73
+71
+205
+66
+63
+188
+59
+54
+175
+61
+51
+165
+63
+51
+153
+64
+48
+146
+65
+48
+144
+67
+51
+140
+64
+50
+137
+64
+49
+136
+62
+49
+134
+60
+49
+132
+60
+48
+129
+59
+49
+129
+59
+49
+128
+60
+49
+128
+60
+49
+127
+61
+49
+127
+60
+51
+127
+61
+49
+127
+61
+49
+127
+61
+47
+127
+61
+49
+127
+61
+47
+128
+60
+47
+129
+60
+45
+131
+59
+45
+131
+57
+44
+133
+57
+44
+132
+56
+42
+133
+55
+43
+133
+54
+41
+141
+57
+46
+143
+56
+46
+145
+57
+45
+148
+58
+47
+151
+59
+46
+154
+61
+46
+158
+60
+47
+159
+62
+46
+153
+57
+41
+150
+57
+40
+147
+58
+42
+144
+58
+43
+138
+59
+44
+135
+59
+43
+132
+59
+44
+130
+58
+43
+130
+58
+44
+129
+57
+43
+127
+55
+41
+126
+54
+40
+123
+53
+41
+123
+53
+41
+123
+53
+41
+122
+54
+41
+120
+54
+42
+120
+56
+44
+119
+57
+44
+115
+56
+42
+112
+52
+41
+111
+53
+41
+114
+58
+45
+118
+60
+48
+139
+77
+64
+137
+75
+60
+132
+74
+60
+130
+77
+61
+133
+81
+67
+139
+86
+72
+146
+88
+77
+151
+87
+78
+147
+78
+73
+153
+84
+79
+151
+86
+82
+149
+92
+85
+144
+101
+92
+123
+94
+80
+102
+86
+70
+96
+94
+71
+69
+79
+45
+62
+78
+41
+63
+79
+40
+74
+92
+50
+95
+114
+69
+107
+126
+81
+101
+120
+75
+88
+106
+64
+77
+95
+55
+64
+81
+45
+54
+69
+38
+55
+68
+42
+61
+70
+49
+61
+68
+52
+58
+62
+48
+55
+59
+45
+56
+58
+44
+58
+59
+45
+54
+56
+45
+56
+59
+48
+62
+66
+52
+55
+64
+45
+57
+70
+44
+73
+91
+53
+91
+113
+66
+101
+129
+70
+114
+145
+78
+115
+151
+79
+115
+151
+77
+114
+155
+79
+115
+155
+84
+112
+156
+81
+109
+156
+76
+111
+160
+79
+115
+164
+85
+120
+168
+92
+122
+168
+96
+115
+160
+91
+105
+147
+81
+96
+138
+72
+89
+129
+66
+94
+134
+71
+101
+140
+77
+103
+142
+77
+102
+141
+74
+101
+141
+71
+103
+140
+71
+104
+140
+76
+97
+132
+78
+88
+122
+72
+81
+115
+65
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+107
+98
+83
+107
+98
+83
+107
+98
+83
+107
+98
+83
+107
+98
+83
+107
+98
+83
+107
+98
+83
+107
+98
+83
+108
+98
+88
+108
+98
+86
+108
+98
+86
+108
+99
+82
+108
+99
+82
+108
+100
+79
+108
+100
+79
+108
+100
+77
+108
+100
+77
+108
+100
+77
+108
+100
+79
+108
+100
+81
+108
+99
+82
+108
+99
+84
+108
+98
+86
+108
+98
+86
+111
+99
+85
+109
+97
+83
+107
+98
+83
+108
+99
+84
+109
+100
+85
+108
+99
+84
+105
+96
+81
+102
+95
+79
+98
+91
+75
+94
+87
+71
+88
+81
+65
+82
+76
+60
+79
+73
+57
+74
+71
+54
+73
+67
+51
+65
+67
+46
+60
+70
+43
+66
+69
+42
+86
+64
+43
+122
+70
+57
+163
+80
+76
+178
+72
+72
+180
+57
+60
+183
+52
+57
+197
+67
+69
+193
+65
+64
+200
+75
+73
+222
+98
+96
+241
+113
+112
+242
+109
+112
+233
+97
+101
+228
+89
+92
+219
+81
+78
+213
+76
+68
+207
+68
+63
+205
+66
+59
+207
+68
+63
+208
+69
+62
+208
+66
+62
+205
+64
+57
+210
+67
+63
+210
+67
+61
+212
+67
+64
+213
+68
+63
+215
+67
+65
+216
+68
+64
+217
+69
+67
+218
+68
+67
+221
+65
+68
+221
+65
+68
+222
+68
+70
+221
+71
+72
+223
+73
+72
+224
+74
+73
+227
+73
+73
+229
+71
+72
+231
+65
+67
+234
+65
+68
+236
+66
+69
+236
+66
+69
+231
+65
+65
+226
+64
+62
+219
+61
+58
+214
+60
+58
+219
+69
+70
+204
+60
+60
+188
+54
+51
+177
+58
+50
+169
+62
+52
+155
+61
+49
+147
+61
+48
+145
+63
+49
+139
+60
+47
+139
+59
+48
+138
+58
+49
+137
+57
+48
+136
+56
+49
+135
+56
+51
+136
+57
+52
+133
+58
+52
+128
+60
+51
+125
+61
+51
+125
+61
+52
+125
+61
+51
+125
+61
+51
+125
+61
+49
+125
+61
+51
+124
+60
+48
+124
+60
+48
+124
+61
+46
+126
+60
+46
+126
+58
+45
+125
+57
+44
+125
+56
+41
+126
+54
+42
+126
+54
+42
+131
+57
+46
+131
+57
+46
+135
+57
+45
+137
+57
+46
+141
+57
+46
+145
+59
+46
+149
+60
+46
+150
+61
+45
+146
+57
+41
+145
+58
+41
+141
+58
+42
+138
+59
+42
+135
+59
+43
+131
+60
+42
+128
+59
+43
+126
+59
+42
+128
+56
+42
+128
+56
+44
+126
+54
+42
+125
+53
+41
+124
+52
+40
+122
+52
+40
+122
+52
+42
+121
+53
+42
+117
+50
+41
+118
+54
+44
+118
+56
+45
+114
+54
+43
+111
+51
+41
+111
+53
+42
+115
+58
+47
+120
+64
+51
+138
+80
+66
+134
+78
+63
+129
+78
+61
+130
+81
+64
+133
+86
+70
+137
+88
+73
+142
+85
+74
+145
+82
+73
+146
+79
+73
+151
+84
+78
+147
+84
+79
+145
+92
+86
+138
+102
+90
+110
+91
+74
+80
+75
+55
+69
+75
+49
+65
+78
+48
+75
+90
+57
+87
+103
+67
+96
+114
+74
+103
+121
+79
+100
+122
+76
+86
+108
+62
+71
+93
+47
+65
+86
+45
+55
+72
+36
+49
+64
+33
+54
+66
+42
+61
+70
+53
+60
+68
+57
+56
+61
+54
+55
+58
+51
+57
+59
+46
+59
+60
+46
+54
+56
+45
+57
+60
+49
+63
+67
+53
+55
+64
+45
+55
+68
+42
+70
+88
+50
+86
+108
+61
+97
+125
+66
+111
+142
+75
+113
+149
+77
+115
+151
+77
+114
+155
+79
+116
+156
+85
+113
+157
+82
+111
+158
+80
+113
+162
+81
+117
+166
+87
+118
+166
+90
+115
+161
+89
+106
+151
+82
+98
+140
+74
+91
+133
+69
+94
+134
+72
+96
+136
+73
+99
+138
+75
+101
+140
+75
+102
+141
+74
+102
+142
+72
+102
+139
+70
+101
+137
+73
+96
+131
+77
+87
+121
+71
+80
+114
+64
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+105
+96
+81
+107
+98
+83
+107
+98
+83
+107
+98
+83
+107
+98
+83
+107
+98
+83
+107
+98
+83
+107
+98
+83
+107
+98
+83
+108
+98
+86
+108
+99
+84
+108
+99
+84
+108
+99
+82
+108
+100
+81
+108
+100
+79
+108
+100
+79
+108
+100
+77
+108
+100
+77
+108
+100
+79
+108
+100
+79
+108
+100
+81
+108
+99
+82
+108
+99
+84
+108
+99
+84
+108
+99
+84
+110
+98
+84
+109
+97
+83
+109
+97
+83
+109
+97
+83
+109
+100
+85
+108
+99
+84
+106
+97
+82
+103
+96
+80
+100
+93
+77
+96
+89
+73
+90
+83
+67
+85
+78
+62
+80
+75
+56
+77
+72
+53
+73
+68
+49
+69
+67
+46
+65
+69
+42
+71
+67
+40
+92
+65
+44
+137
+83
+71
+175
+92
+88
+169
+63
+65
+169
+49
+51
+203
+74
+78
+195
+64
+69
+189
+61
+62
+185
+59
+60
+195
+71
+71
+216
+90
+91
+229
+101
+102
+221
+88
+91
+205
+71
+72
+209
+74
+71
+207
+69
+66
+205
+66
+63
+206
+67
+62
+210
+71
+66
+210
+71
+66
+206
+67
+62
+201
+62
+55
+207
+68
+61
+209
+68
+61
+210
+68
+64
+212
+69
+65
+214
+69
+66
+217
+69
+67
+220
+67
+69
+222
+68
+70
+222
+63
+67
+223
+64
+68
+222
+66
+69
+223
+69
+69
+225
+71
+71
+224
+70
+70
+224
+66
+67
+225
+62
+63
+232
+66
+68
+234
+64
+67
+232
+62
+65
+231
+61
+62
+228
+62
+62
+228
+64
+63
+226
+67
+64
+223
+69
+67
+215
+65
+66
+200
+56
+56
+184
+52
+48
+177
+58
+52
+169
+62
+54
+155
+61
+51
+146
+60
+47
+142
+63
+50
+137
+59
+47
+136
+58
+48
+136
+58
+48
+136
+56
+49
+136
+55
+51
+138
+55
+51
+137
+56
+52
+136
+59
+53
+128
+58
+50
+126
+59
+50
+126
+59
+50
+124
+60
+50
+124
+60
+48
+124
+60
+48
+124
+60
+48
+124
+60
+48
+120
+56
+44
+121
+57
+45
+124
+58
+46
+124
+58
+46
+125
+59
+45
+125
+59
+45
+125
+57
+44
+125
+57
+44
+126
+58
+47
+127
+57
+47
+128
+55
+46
+129
+55
+44
+132
+54
+42
+133
+53
+42
+134
+55
+42
+134
+55
+40
+138
+56
+42
+136
+57
+42
+136
+59
+43
+133
+60
+45
+132
+60
+45
+128
+61
+44
+126
+60
+44
+125
+59
+43
+125
+57
+44
+125
+55
+45
+124
+54
+44
+121
+53
+42
+122
+52
+42
+120
+52
+41
+120
+52
+41
+120
+53
+44
+114
+50
+40
+117
+53
+43
+118
+56
+45
+114
+54
+43
+110
+52
+41
+110
+53
+42
+116
+59
+48
+120
+66
+54
+138
+85
+71
+132
+80
+66
+128
+79
+64
+132
+83
+68
+136
+87
+73
+140
+86
+74
+140
+82
+71
+141
+78
+71
+149
+84
+78
+148
+85
+78
+139
+82
+75
+132
+88
+77
+127
+100
+83
+101
+90
+68
+71
+75
+50
+61
+74
+44
+73
+88
+57
+90
+107
+73
+103
+120
+84
+99
+120
+81
+89
+110
+69
+83
+104
+61
+78
+99
+56
+74
+95
+52
+58
+76
+38
+48
+63
+30
+44
+57
+29
+53
+62
+41
+61
+67
+53
+60
+66
+56
+58
+60
+55
+57
+60
+53
+59
+61
+50
+59
+61
+48
+55
+57
+46
+57
+60
+49
+63
+67
+53
+56
+63
+45
+56
+66
+41
+69
+85
+49
+85
+104
+59
+97
+122
+67
+110
+138
+77
+114
+147
+78
+114
+150
+78
+114
+154
+81
+115
+157
+83
+113
+157
+82
+114
+160
+85
+117
+163
+88
+118
+164
+91
+116
+162
+90
+111
+154
+85
+102
+144
+78
+94
+136
+72
+91
+131
+68
+100
+140
+78
+97
+137
+75
+96
+135
+72
+99
+138
+73
+102
+141
+74
+103
+142
+75
+101
+138
+69
+97
+133
+69
+96
+131
+77
+87
+121
+71
+80
+114
+64
+105
+96
+81
+105
+96
+81
+105
+96
+81
+106
+97
+82
+106
+97
+82
+107
+98
+83
+107
+98
+83
+107
+98
+83
+106
+97
+82
+106
+97
+82
+106
+97
+82
+106
+97
+82
+106
+97
+82
+106
+97
+82
+106
+97
+82
+106
+97
+82
+107
+98
+83
+107
+98
+83
+107
+98
+83
+107
+98
+83
+107
+98
+81
+107
+98
+81
+107
+98
+81
+107
+98
+81
+108
+99
+82
+108
+99
+82
+108
+99
+82
+108
+99
+82
+108
+99
+84
+108
+99
+84
+108
+99
+84
+110
+98
+84
+107
+93
+80
+112
+96
+81
+116
+100
+87
+114
+100
+87
+110
+98
+86
+106
+96
+84
+104
+96
+83
+104
+98
+84
+103
+97
+83
+103
+97
+81
+99
+93
+77
+91
+86
+67
+86
+81
+61
+83
+78
+56
+78
+72
+50
+71
+65
+41
+76
+70
+44
+74
+62
+36
+98
+73
+51
+145
+103
+87
+182
+120
+109
+187
+108
+101
+183
+89
+87
+185
+79
+79
+182
+66
+69
+189
+66
+69
+194
+68
+71
+200
+70
+72
+205
+72
+75
+208
+74
+75
+211
+75
+77
+211
+75
+77
+205
+69
+69
+205
+69
+69
+208
+70
+68
+211
+72
+69
+212
+70
+66
+207
+68
+61
+206
+67
+60
+207
+70
+60
+200
+68
+56
+201
+69
+57
+203
+69
+60
+207
+68
+63
+212
+67
+64
+216
+66
+67
+222
+63
+68
+222
+61
+67
+225
+66
+70
+223
+67
+68
+223
+67
+68
+224
+68
+69
+224
+68
+69
+225
+70
+68
+225
+70
+68
+227
+69
+68
+227
+67
+67
+228
+66
+64
+228
+64
+63
+227
+63
+62
+227
+63
+62
+227
+63
+61
+227
+63
+61
+224
+66
+63
+211
+66
+63
+197
+62
+58
+184
+57
+51
+170
+55
+48
+160
+57
+48
+151
+61
+50
+142
+62
+51
+134
+62
+50
+131
+63
+50
+129
+63
+51
+129
+61
+50
+129
+59
+51
+132
+57
+51
+135
+56
+51
+136
+56
+49
+136
+57
+50
+133
+59
+48
+132
+60
+46
+132
+60
+46
+129
+60
+45
+129
+59
+47
+128
+58
+46
+128
+58
+46
+128
+58
+46
+126
+58
+45
+126
+58
+45
+126
+58
+45
+126
+58
+45
+126
+58
+47
+126
+58
+47
+126
+58
+47
+126
+58
+47
+125
+57
+48
+125
+57
+48
+126
+56
+48
+126
+56
+46
+128
+55
+46
+128
+55
+46
+128
+55
+46
+126
+56
+44
+128
+56
+44
+126
+56
+44
+125
+57
+44
+124
+56
+45
+123
+57
+45
+122
+56
+44
+120
+56
+44
+120
+56
+44
+120
+56
+46
+120
+56
+46
+119
+55
+45
+118
+56
+45
+118
+54
+44
+116
+54
+43
+115
+53
+42
+113
+53
+43
+109
+49
+39
+114
+54
+44
+110
+52
+41
+109
+51
+40
+111
+54
+43
+109
+52
+41
+113
+56
+45
+127
+73
+61
+133
+83
+72
+133
+83
+74
+134
+82
+71
+136
+82
+72
+139
+80
+72
+144
+81
+74
+148
+81
+75
+149
+82
+76
+147
+84
+77
+141
+84
+75
+137
+91
+78
+130
+99
+81
+111
+95
+72
+89
+85
+58
+77
+86
+55
+79
+95
+59
+106
+126
+89
+98
+120
+81
+89
+111
+72
+85
+106
+67
+82
+103
+64
+77
+98
+59
+73
+89
+53
+67
+82
+49
+55
+68
+38
+52
+62
+35
+50
+58
+35
+54
+59
+39
+60
+62
+48
+64
+66
+53
+64
+64
+54
+60
+62
+51
+53
+56
+45
+51
+57
+45
+52
+58
+46
+55
+58
+47
+57
+61
+47
+59
+63
+46
+61
+66
+44
+60
+69
+40
+83
+95
+59
+97
+114
+70
+110
+134
+82
+115
+145
+85
+114
+149
+81
+114
+154
+83
+115
+157
+83
+114
+157
+85
+117
+158
+90
+126
+167
+101
+126
+167
+101
+112
+152
+89
+98
+138
+75
+94
+134
+71
+94
+134
+72
+94
+132
+71
+96
+134
+73
+98
+136
+75
+100
+138
+77
+102
+141
+78
+101
+140
+77
+99
+138
+75
+96
+135
+72
+94
+132
+71
+95
+130
+76
+84
+118
+68
+75
+109
+59
+105
+96
+81
+105
+96
+81
+105
+96
+81
+106
+97
+82
+106
+97
+82
+107
+98
+83
+107
+98
+83
+107
+98
+83
+106
+97
+82
+106
+97
+82
+106
+97
+82
+106
+97
+82
+106
+97
+82
+106
+97
+82
+106
+97
+82
+106
+97
+82
+107
+98
+83
+107
+98
+83
+107
+98
+83
+107
+98
+83
+107
+98
+83
+107
+98
+83
+107
+98
+83
+107
+98
+83
+108
+99
+84
+108
+99
+84
+108
+99
+84
+108
+99
+84
+108
+99
+84
+108
+99
+84
+108
+99
+84
+110
+98
+84
+114
+98
+83
+113
+97
+82
+114
+98
+85
+113
+99
+86
+114
+102
+90
+111
+103
+90
+109
+101
+88
+106
+100
+86
+103
+99
+87
+107
+104
+89
+111
+105
+89
+108
+103
+84
+104
+99
+79
+99
+94
+72
+91
+85
+61
+82
+76
+52
+80
+74
+48
+72
+62
+37
+81
+63
+41
+107
+80
+61
+127
+88
+71
+132
+78
+66
+136
+69
+61
+147
+68
+63
+177
+87
+86
+184
+84
+84
+187
+81
+81
+192
+80
+79
+192
+78
+77
+193
+77
+77
+194
+76
+74
+194
+76
+74
+205
+85
+84
+197
+73
+71
+192
+62
+62
+195
+61
+58
+205
+67
+64
+209
+70
+65
+205
+66
+59
+199
+62
+52
+202
+68
+57
+202
+68
+57
+204
+70
+61
+208
+69
+62
+214
+69
+66
+219
+66
+68
+223
+64
+69
+224
+63
+69
+223
+67
+70
+223
+67
+68
+223
+67
+68
+223
+69
+69
+224
+69
+67
+224
+70
+68
+225
+70
+68
+225
+70
+68
+224
+69
+65
+225
+67
+64
+224
+66
+63
+224
+65
+62
+226
+64
+61
+226
+64
+61
+226
+64
+61
+224
+66
+63
+213
+68
+63
+200
+67
+60
+186
+62
+54
+172
+58
+48
+160
+57
+48
+148
+58
+47
+138
+60
+48
+130
+60
+48
+128
+65
+50
+126
+64
+51
+126
+62
+52
+127
+60
+51
+131
+58
+51
+134
+57
+49
+136
+56
+49
+137
+57
+48
+135
+59
+46
+133
+60
+45
+132
+59
+44
+132
+59
+44
+131
+59
+45
+130
+58
+44
+130
+58
+44
+130
+58
+44
+127
+57
+45
+127
+57
+45
+127
+57
+45
+127
+57
+45
+126
+58
+47
+126
+58
+47
+126
+58
+47
+126
+58
+47
+125
+57
+48
+125
+57
+48
+125
+57
+48
+125
+57
+48
+125
+57
+48
+125
+57
+48
+124
+57
+48
+124
+57
+48
+124
+57
+48
+122
+58
+48
+122
+58
+48
+121
+57
+47
+121
+57
+47
+121
+57
+47
+119
+57
+46
+119
+57
+46
+119
+56
+47
+119
+56
+47
+116
+56
+46
+115
+55
+45
+114
+54
+44
+114
+54
+44
+112
+54
+43
+112
+54
+43
+107
+49
+38
+113
+55
+44
+109
+52
+41
+108
+51
+40
+111
+54
+43
+108
+51
+40
+112
+55
+44
+126
+72
+62
+132
+82
+73
+133
+83
+76
+136
+81
+74
+139
+80
+74
+144
+81
+76
+148
+80
+77
+149
+81
+78
+148
+83
+79
+138
+79
+71
+133
+83
+72
+128
+91
+75
+123
+101
+80
+115
+105
+80
+104
+107
+76
+102
+113
+81
+103
+120
+84
+94
+116
+77
+88
+110
+71
+80
+102
+63
+76
+97
+58
+75
+95
+58
+75
+92
+58
+71
+86
+55
+67
+80
+52
+60
+70
+45
+56
+64
+41
+54
+59
+39
+55
+58
+41
+60
+61
+47
+63
+64
+50
+62
+62
+50
+59
+61
+48
+52
+58
+48
+51
+59
+48
+53
+59
+49
+54
+60
+48
+58
+60
+47
+60
+63
+46
+62
+65
+44
+62
+68
+42
+81
+91
+57
+94
+109
+68
+107
+129
+82
+112
+140
+82
+112
+147
+83
+113
+153
+82
+115
+157
+83
+115
+158
+86
+120
+159
+94
+124
+162
+101
+120
+158
+97
+107
+145
+84
+96
+134
+73
+93
+131
+70
+93
+131
+70
+92
+130
+69
+96
+134
+73
+97
+135
+74
+99
+137
+76
+101
+139
+78
+100
+138
+77
+98
+136
+75
+96
+134
+73
+94
+132
+73
+93
+127
+76
+82
+116
+66
+73
+107
+57
+105
+96
+81
+105
+96
+81
+105
+96
+81
+106
+97
+82
+106
+97
+82
+107
+98
+83
+107
+98
+83
+107
+98
+83
+106
+97
+82
+106
+97
+82
+106
+97
+82
+106
+97
+82
+106
+97
+82
+106
+97
+82
+106
+97
+82
+106
+97
+82
+107
+98
+83
+107
+98
+83
+107
+98
+83
+107
+98
+83
+107
+98
+83
+107
+98
+83
+107
+98
+83
+107
+98
+83
+108
+99
+84
+108
+99
+84
+108
+99
+84
+108
+99
+84
+108
+99
+84
+108
+99
+84
+108
+99
+84
+110
+98
+84
+113
+100
+84
+111
+95
+80
+109
+93
+80
+109
+95
+82
+113
+101
+89
+111
+103
+92
+108
+100
+89
+104
+98
+86
+102
+98
+87
+112
+108
+96
+123
+120
+105
+126
+123
+106
+127
+121
+105
+122
+117
+98
+112
+105
+86
+101
+96
+74
+84
+84
+60
+70
+70
+46
+67
+62
+40
+77
+66
+46
+83
+64
+47
+85
+56
+40
+93
+55
+42
+108
+61
+51
+110
+55
+48
+117
+57
+49
+126
+59
+53
+135
+64
+58
+146
+73
+66
+155
+80
+74
+165
+88
+80
+171
+91
+82
+185
+94
+89
+183
+84
+78
+181
+72
+69
+186
+67
+63
+198
+68
+66
+206
+71
+67
+210
+68
+64
+207
+64
+58
+208
+65
+59
+209
+66
+60
+211
+68
+62
+213
+70
+64
+215
+70
+67
+219
+69
+70
+222
+68
+70
+222
+68
+70
+222
+68
+68
+222
+68
+68
+222
+68
+68
+221
+69
+68
+223
+69
+69
+222
+70
+69
+223
+69
+67
+223
+69
+67
+222
+68
+66
+222
+68
+66
+221
+68
+63
+220
+67
+62
+221
+66
+61
+221
+66
+61
+221
+66
+61
+220
+67
+62
+214
+69
+64
+206
+69
+63
+195
+66
+60
+179
+62
+53
+162
+58
+49
+148
+56
+45
+136
+57
+44
+131
+59
+45
+130
+64
+50
+127
+64
+49
+126
+62
+50
+127
+61
+49
+131
+58
+49
+134
+57
+49
+135
+56
+49
+136
+58
+48
+135
+59
+46
+132
+59
+44
+132
+59
+44
+132
+59
+44
+130
+58
+44
+130
+58
+44
+128
+58
+46
+128
+58
+46
+127
+57
+45
+127
+57
+45
+126
+58
+47
+126
+58
+47
+126
+58
+47
+126
+58
+47
+126
+58
+47
+126
+58
+47
+125
+57
+48
+125
+57
+48
+125
+57
+48
+125
+57
+48
+124
+57
+48
+123
+56
+47
+123
+56
+47
+123
+56
+47
+123
+59
+49
+123
+59
+49
+122
+58
+48
+121
+59
+48
+120
+58
+47
+120
+58
+47
+120
+58
+47
+120
+58
+47
+116
+56
+46
+116
+56
+46
+115
+55
+45
+115
+55
+45
+114
+54
+44
+113
+53
+43
+111
+53
+42
+111
+53
+42
+106
+49
+38
+111
+54
+43
+109
+52
+41
+107
+50
+39
+108
+54
+42
+105
+51
+39
+109
+55
+43
+125
+71
+61
+135
+80
+73
+135
+80
+73
+139
+80
+74
+142
+81
+76
+145
+82
+77
+146
+83
+78
+148
+85
+80
+145
+86
+80
+140
+87
+79
+135
+91
+80
+126
+94
+79
+116
+98
+78
+111
+105
+81
+111
+114
+85
+108
+119
+89
+102
+119
+85
+81
+101
+66
+75
+95
+58
+69
+89
+54
+68
+85
+51
+69
+86
+54
+71
+86
+57
+71
+84
+56
+69
+82
+56
+63
+73
+48
+60
+68
+45
+57
+62
+42
+55
+59
+42
+58
+60
+46
+60
+62
+48
+59
+61
+47
+57
+59
+46
+54
+60
+50
+53
+61
+50
+54
+60
+50
+54
+60
+48
+58
+60
+47
+60
+62
+48
+61
+64
+45
+61
+67
+41
+77
+87
+53
+90
+105
+64
+102
+124
+77
+108
+136
+78
+110
+145
+81
+113
+153
+82
+117
+159
+85
+116
+159
+87
+122
+161
+96
+119
+157
+96
+110
+148
+87
+99
+137
+76
+92
+130
+69
+92
+130
+69
+92
+130
+69
+90
+128
+67
+95
+133
+72
+97
+135
+74
+98
+136
+75
+100
+138
+77
+99
+137
+76
+97
+135
+74
+95
+133
+72
+93
+131
+72
+91
+125
+74
+80
+113
+66
+70
+103
+56
+105
+96
+81
+105
+96
+81
+105
+96
+81
+106
+97
+82
+106
+97
+82
+107
+98
+83
+107
+98
+83
+107
+98
+83
+106
+97
+82
+106
+97
+82
+106
+97
+82
+106
+97
+82
+106
+97
+82
+106
+97
+82
+106
+97
+82
+106
+97
+82
+107
+98
+83
+107
+98
+83
+107
+98
+83
+107
+98
+83
+107
+98
+83
+107
+98
+83
+107
+98
+83
+107
+98
+83
+108
+99
+84
+108
+99
+84
+108
+99
+84
+108
+99
+84
+108
+99
+84
+108
+99
+84
+108
+99
+84
+110
+98
+84
+114
+100
+87
+111
+97
+84
+109
+95
+82
+107
+95
+83
+107
+97
+87
+108
+99
+90
+108
+101
+91
+106
+102
+93
+106
+102
+93
+120
+116
+105
+136
+132
+120
+145
+141
+129
+149
+143
+129
+146
+140
+126
+137
+130
+114
+125
+122
+103
+96
+99
+78
+79
+84
+62
+68
+71
+50
+70
+69
+49
+72
+67
+48
+70
+61
+44
+76
+60
+44
+86
+67
+52
+80
+57
+43
+82
+54
+42
+86
+52
+42
+89
+53
+41
+92
+54
+43
+97
+57
+47
+101
+61
+49
+109
+61
+49
+136
+76
+66
+157
+83
+74
+173
+86
+79
+181
+79
+75
+188
+70
+68
+196
+66
+66
+208
+68
+67
+216
+70
+70
+212
+64
+62
+213
+65
+63
+214
+66
+62
+216
+68
+64
+217
+69
+67
+219
+69
+68
+219
+69
+68
+221
+69
+68
+222
+68
+68
+221
+69
+68
+221
+69
+68
+221
+69
+68
+221
+69
+68
+221
+69
+68
+221
+69
+66
+220
+71
+67
+219
+70
+66
+218
+69
+65
+217
+68
+62
+217
+68
+62
+218
+67
+60
+218
+67
+60
+219
+68
+61
+217
+68
+62
+214
+67
+60
+211
+70
+63
+201
+70
+62
+186
+65
+56
+167
+59
+49
+152
+56
+44
+140
+57
+43
+133
+60
+45
+131
+64
+48
+127
+64
+49
+126
+63
+48
+127
+61
+47
+131
+58
+49
+132
+58
+47
+135
+57
+47
+136
+58
+46
+132
+58
+45
+132
+59
+44
+132
+59
+44
+131
+58
+43
+130
+58
+44
+130
+58
+44
+127
+57
+45
+127
+57
+45
+127
+57
+45
+127
+57
+45
+126
+58
+47
+126
+58
+47
+126
+58
+47
+126
+58
+47
+126
+58
+47
+126
+58
+47
+125
+57
+48
+124
+57
+48
+125
+57
+48
+123
+56
+47
+123
+56
+47
+123
+56
+47
+123
+56
+47
+120
+56
+46
+123
+59
+49
+121
+59
+48
+121
+59
+48
+121
+59
+48
+120
+58
+47
+120
+58
+47
+120
+58
+47
+118
+58
+47
+115
+55
+45
+115
+55
+45
+115
+55
+45
+114
+54
+44
+113
+53
+43
+111
+53
+42
+111
+53
+42
+109
+52
+41
+106
+49
+38
+111
+54
+43
+108
+51
+40
+104
+50
+38
+107
+53
+41
+104
+50
+38
+108
+54
+42
+124
+70
+60
+138
+79
+71
+140
+79
+74
+141
+80
+75
+143
+82
+77
+144
+83
+78
+145
+86
+80
+144
+87
+80
+140
+90
+81
+137
+93
+82
+133
+97
+85
+121
+95
+80
+105
+90
+71
+100
+95
+73
+100
+104
+79
+92
+102
+75
+78
+93
+64
+69
+85
+56
+65
+81
+52
+61
+77
+48
+60
+75
+46
+63
+77
+51
+67
+81
+55
+70
+82
+58
+71
+83
+59
+66
+76
+52
+62
+71
+50
+58
+65
+47
+57
+61
+44
+57
+61
+46
+57
+61
+46
+56
+60
+45
+55
+59
+45
+55
+61
+51
+54
+61
+53
+54
+59
+52
+54
+60
+50
+58
+60
+49
+59
+61
+47
+60
+63
+44
+60
+65
+42
+74
+83
+52
+86
+101
+62
+98
+120
+73
+106
+134
+76
+110
+145
+81
+115
+155
+84
+119
+161
+87
+120
+162
+90
+123
+162
+97
+114
+152
+91
+101
+139
+78
+92
+130
+69
+90
+128
+67
+92
+130
+69
+92
+130
+69
+90
+128
+67
+95
+133
+72
+96
+134
+73
+97
+135
+74
+98
+136
+75
+97
+135
+74
+96
+134
+73
+94
+132
+71
+93
+131
+74
+90
+124
+74
+78
+111
+64
+69
+102
+55
+104
+97
+81
+104
+97
+81
+104
+97
+81
+105
+98
+82
+105
+98
+82
+106
+99
+83
+106
+99
+83
+106
+99
+83
+105
+98
+82
+105
+98
+82
+105
+98
+82
+105
+98
+82
+105
+98
+82
+105
+98
+82
+105
+98
+82
+105
+98
+82
+107
+98
+83
+107
+98
+83
+107
+98
+83
+107
+98
+83
+107
+98
+83
+107
+98
+83
+107
+98
+83
+107
+98
+83
+108
+99
+84
+108
+99
+84
+108
+99
+84
+108
+99
+84
+108
+99
+84
+108
+99
+84
+108
+99
+84
+108
+99
+84
+114
+102
+88
+116
+104
+92
+115
+103
+91
+109
+99
+89
+106
+97
+88
+108
+101
+93
+115
+110
+104
+122
+119
+112
+129
+126
+119
+144
+141
+134
+160
+157
+148
+168
+165
+156
+171
+167
+156
+168
+164
+153
+163
+157
+145
+153
+150
+135
+122
+123
+107
+99
+102
+83
+79
+82
+63
+71
+74
+55
+69
+72
+53
+66
+69
+50
+66
+69
+50
+69
+72
+53
+75
+76
+60
+74
+72
+57
+71
+68
+53
+68
+62
+48
+65
+57
+44
+65
+55
+43
+64
+54
+42
+70
+52
+40
+85
+53
+42
+113
+66
+56
+142
+79
+72
+160
+79
+75
+175
+73
+71
+191
+71
+73
+204
+69
+73
+211
+66
+69
+213
+64
+66
+215
+65
+66
+216
+66
+65
+217
+67
+66
+218
+69
+65
+218
+69
+65
+218
+69
+65
+218
+69
+65
+221
+69
+68
+221
+68
+70
+221
+68
+70
+219
+69
+70
+219
+69
+68
+219
+69
+68
+219
+69
+68
+217
+69
+67
+218
+70
+66
+217
+69
+65
+214
+70
+62
+213
+69
+61
+213
+69
+61
+213
+69
+61
+213
+69
+61
+214
+70
+62
+212
+65
+58
+211
+67
+59
+206
+69
+61
+193
+66
+57
+174
+62
+51
+158
+57
+45
+145
+59
+46
+138
+60
+47
+132
+63
+48
+129
+63
+47
+128
+62
+46
+128
+61
+45
+129
+59
+47
+132
+58
+45
+134
+58
+45
+135
+59
+46
+132
+58
+45
+131
+59
+45
+130
+58
+44
+130
+58
+44
+130
+58
+44
+129
+57
+43
+127
+57
+45
+127
+57
+45
+126
+58
+47
+126
+58
+47
+126
+58
+47
+126
+58
+47
+125
+58
+49
+125
+58
+49
+125
+58
+49
+125
+58
+49
+124
+57
+49
+122
+58
+49
+124
+57
+49
+121
+57
+48
+121
+57
+48
+120
+56
+47
+120
+56
+47
+118
+55
+46
+121
+58
+49
+121
+58
+49
+120
+57
+48
+118
+58
+48
+118
+58
+48
+117
+57
+47
+117
+57
+47
+116
+58
+47
+114
+55
+47
+113
+54
+46
+113
+54
+46
+112
+53
+45
+111
+52
+44
+110
+51
+43
+110
+51
+43
+109
+52
+43
+106
+49
+40
+109
+55
+45
+106
+52
+42
+104
+50
+40
+106
+52
+42
+102
+50
+39
+106
+54
+43
+125
+68
+59
+141
+78
+71
+143
+78
+72
+144
+81
+74
+144
+84
+76
+144
+85
+79
+142
+87
+80
+138
+89
+82
+131
+91
+81
+123
+89
+77
+118
+92
+79
+107
+90
+74
+93
+85
+66
+89
+88
+68
+89
+94
+72
+79
+89
+65
+63
+75
+51
+58
+72
+47
+55
+69
+46
+52
+66
+43
+53
+65
+43
+56
+68
+46
+61
+73
+51
+67
+76
+55
+69
+78
+57
+66
+75
+54
+63
+72
+53
+60
+69
+50
+58
+65
+47
+56
+63
+47
+55
+62
+46
+53
+60
+44
+52
+58
+44
+53
+60
+52
+53
+60
+53
+54
+59
+53
+54
+59
+52
+57
+59
+48
+58
+60
+47
+59
+62
+45
+59
+64
+41
+71
+80
+49
+82
+97
+58
+96
+118
+71
+105
+133
+75
+111
+146
+82
+117
+157
+86
+121
+163
+89
+121
+163
+91
+120
+159
+96
+110
+145
+87
+96
+131
+73
+90
+125
+67
+91
+126
+68
+94
+129
+71
+94
+129
+71
+93
+128
+70
+96
+131
+73
+97
+132
+74
+98
+133
+75
+98
+133
+75
+97
+132
+74
+96
+131
+73
+95
+130
+72
+94
+129
+73
+87
+124
+73
+76
+112
+66
+66
+102
+56
+104
+97
+81
+104
+97
+81
+104
+97
+81
+105
+98
+82
+105
+98
+82
+106
+99
+83
+106
+99
+83
+106
+99
+83
+105
+98
+82
+105
+98
+82
+105
+98
+82
+105
+98
+82
+105
+98
+82
+105
+98
+82
+105
+98
+82
+105
+98
+82
+107
+98
+83
+107
+98
+83
+107
+98
+83
+107
+98
+83
+107
+98
+83
+107
+98
+83
+107
+98
+83
+107
+98
+83
+108
+99
+84
+108
+99
+84
+108
+99
+84
+108
+99
+84
+108
+99
+84
+108
+99
+84
+108
+99
+84
+108
+99
+84
+107
+97
+85
+110
+100
+90
+112
+102
+92
+108
+99
+90
+107
+100
+92
+114
+109
+103
+132
+129
+124
+145
+144
+140
+167
+163
+160
+181
+177
+174
+196
+193
+188
+201
+198
+193
+201
+196
+190
+197
+192
+186
+192
+185
+177
+185
+178
+168
+164
+156
+143
+136
+130
+114
+102
+99
+84
+80
+81
+63
+70
+73
+56
+62
+69
+51
+59
+68
+49
+58
+70
+50
+56
+69
+51
+56
+69
+51
+56
+67
+50
+58
+66
+51
+60
+66
+52
+64
+67
+56
+67
+69
+58
+71
+69
+57
+64
+52
+40
+83
+56
+47
+104
+61
+54
+129
+68
+65
+163
+79
+79
+192
+87
+91
+204
+81
+86
+202
+67
+73
+211
+71
+74
+214
+70
+70
+216
+70
+70
+218
+70
+68
+219
+70
+66
+219
+70
+66
+220
+68
+63
+220
+68
+65
+221
+69
+68
+221
+68
+70
+219
+69
+70
+219
+69
+70
+218
+68
+67
+218
+68
+67
+218
+68
+67
+217
+69
+67
+217
+69
+65
+215
+70
+65
+214
+69
+64
+212
+69
+61
+211
+68
+60
+210
+69
+60
+211
+70
+61
+212
+69
+61
+212
+63
+56
+213
+64
+57
+208
+67
+58
+198
+67
+57
+182
+65
+55
+165
+61
+48
+150
+61
+47
+140
+61
+46
+134
+62
+47
+130
+63
+47
+129
+62
+46
+128
+61
+45
+129
+60
+45
+131
+59
+45
+132
+58
+45
+133
+59
+46
+130
+58
+44
+130
+58
+44
+130
+58
+44
+130
+58
+44
+129
+57
+43
+127
+58
+43
+127
+57
+45
+126
+56
+44
+126
+58
+47
+126
+58
+47
+126
+58
+47
+126
+58
+47
+125
+58
+49
+125
+58
+49
+125
+58
+49
+125
+58
+49
+122
+58
+49
+122
+58
+49
+121
+57
+48
+121
+57
+48
+120
+56
+47
+118
+55
+46
+118
+55
+46
+116
+56
+46
+119
+56
+47
+117
+57
+47
+117
+57
+47
+115
+57
+46
+116
+56
+46
+115
+57
+46
+114
+56
+45
+114
+56
+45
+113
+54
+46
+113
+54
+46
+112
+53
+45
+111
+52
+44
+110
+51
+43
+109
+52
+43
+108
+51
+42
+106
+52
+42
+104
+50
+40
+108
+54
+44
+105
+51
+41
+102
+50
+39
+104
+52
+41
+101
+49
+38
+105
+53
+42
+123
+66
+57
+142
+77
+71
+146
+77
+72
+145
+80
+74
+143
+84
+76
+141
+86
+79
+135
+88
+78
+129
+89
+79
+124
+92
+81
+115
+92
+78
+107
+91
+76
+96
+87
+70
+86
+83
+66
+80
+83
+66
+74
+81
+63
+64
+73
+54
+52
+64
+44
+51
+60
+43
+50
+59
+42
+48
+57
+40
+48
+57
+40
+50
+59
+42
+53
+62
+45
+57
+66
+49
+60
+69
+52
+63
+72
+55
+63
+72
+53
+62
+71
+52
+58
+70
+50
+58
+67
+50
+53
+64
+47
+51
+62
+45
+49
+60
+44
+51
+58
+51
+51
+57
+53
+52
+57
+53
+52
+57
+50
+56
+57
+49
+57
+59
+46
+59
+62
+45
+59
+64
+42
+67
+76
+47
+79
+94
+55
+93
+115
+68
+105
+132
+77
+112
+147
+83
+119
+159
+89
+121
+163
+89
+119
+161
+89
+113
+152
+89
+102
+137
+79
+90
+125
+67
+88
+123
+65
+92
+127
+69
+93
+128
+70
+93
+128
+70
+94
+129
+71
+96
+131
+73
+96
+131
+73
+96
+131
+73
+96
+131
+73
+96
+131
+73
+95
+130
+72
+94
+129
+71
+93
+128
+74
+85
+121
+73
+74
+110
+64
+65
+101
+57
+104
+97
+81
+104
+97
+81
+104
+97
+81
+105
+98
+82
+105
+98
+82
+106
+99
+83
+106
+99
+83
+106
+99
+83
+105
+98
+82
+105
+98
+82
+105
+98
+82
+105
+98
+82
+105
+98
+82
+105
+98
+82
+105
+98
+82
+105
+98
+82
+107
+98
+83
+107
+98
+83
+107
+98
+83
+107
+98
+83
+107
+98
+83
+107
+98
+83
+107
+98
+83
+107
+98
+83
+108
+99
+84
+108
+99
+84
+108
+99
+84
+108
+99
+84
+108
+99
+84
+108
+99
+84
+108
+99
+84
+108
+98
+86
+106
+96
+86
+106
+97
+88
+107
+100
+90
+107
+103
+94
+117
+112
+106
+136
+133
+128
+159
+158
+154
+176
+176
+174
+195
+194
+192
+211
+210
+208
+226
+225
+223
+231
+230
+228
+231
+227
+224
+227
+222
+218
+222
+214
+211
+217
+206
+200
+206
+188
+178
+184
+165
+151
+151
+135
+122
+121
+109
+93
+95
+89
+73
+75
+76
+58
+64
+69
+49
+59
+68
+47
+62
+74
+54
+61
+72
+55
+61
+70
+53
+59
+67
+52
+59
+62
+53
+58
+59
+51
+57
+56
+51
+58
+55
+48
+63
+60
+51
+69
+59
+50
+81
+53
+49
+99
+55
+52
+137
+71
+72
+177
+92
+95
+199
+96
+100
+202
+87
+90
+205
+81
+83
+209
+79
+79
+213
+78
+75
+216
+77
+74
+219
+74
+71
+221
+72
+68
+224
+69
+65
+223
+68
+66
+222
+68
+68
+221
+68
+70
+221
+68
+70
+220
+67
+69
+220
+67
+69
+219
+66
+68
+219
+67
+66
+217
+67
+66
+218
+68
+67
+216
+68
+64
+213
+68
+63
+212
+69
+63
+211
+68
+60
+210
+69
+60
+211
+70
+61
+212
+69
+61
+217
+64
+58
+217
+64
+58
+209
+66
+58
+200
+67
+58
+188
+67
+58
+172
+64
+52
+153
+59
+47
+140
+57
+43
+137
+61
+47
+131
+62
+46
+129
+62
+45
+128
+61
+44
+129
+60
+44
+131
+59
+44
+131
+59
+44
+132
+60
+45
+130
+58
+44
+130
+58
+44
+130
+58
+44
+129
+57
+43
+127
+57
+45
+127
+57
+45
+126
+56
+46
+125
+57
+46
+126
+58
+47
+126
+58
+47
+125
+58
+49
+125
+58
+49
+125
+58
+49
+125
+58
+49
+125
+58
+49
+125
+58
+49
+122
+58
+49
+121
+58
+49
+120
+57
+48
+120
+57
+48
+119
+56
+47
+116
+56
+46
+115
+55
+45
+114
+56
+45
+116
+56
+46
+115
+57
+46
+114
+56
+45
+113
+56
+45
+114
+56
+45
+112
+55
+44
+112
+55
+44
+112
+55
+44
+111
+54
+45
+111
+54
+45
+110
+53
+44
+110
+53
+44
+109
+52
+43
+108
+51
+42
+107
+50
+41
+105
+51
+41
+103
+49
+39
+107
+55
+44
+104
+52
+41
+101
+49
+38
+104
+52
+41
+98
+48
+37
+102
+52
+41
+122
+65
+56
+144
+77
+71
+146
+77
+72
+145
+80
+74
+142
+85
+76
+136
+88
+78
+129
+89
+79
+120
+90
+79
+114
+92
+78
+107
+94
+78
+94
+87
+71
+82
+80
+65
+75
+78
+61
+67
+74
+58
+57
+66
+49
+50
+58
+43
+48
+56
+41
+49
+55
+43
+49
+55
+45
+48
+54
+44
+47
+53
+43
+47
+53
+41
+48
+56
+43
+50
+58
+43
+52
+60
+45
+57
+68
+52
+59
+70
+53
+61
+72
+55
+60
+73
+55
+59
+70
+53
+54
+67
+49
+51
+64
+44
+49
+62
+45
+46
+56
+48
+48
+54
+50
+49
+54
+50
+50
+55
+49
+55
+56
+50
+57
+59
+48
+58
+60
+46
+58
+63
+41
+63
+72
+43
+75
+89
+53
+91
+113
+67
+104
+131
+76
+113
+147
+86
+119
+158
+91
+119
+161
+89
+115
+156
+86
+103
+141
+80
+94
+129
+73
+85
+120
+64
+87
+122
+66
+91
+126
+70
+91
+126
+70
+91
+126
+70
+93
+128
+72
+95
+130
+74
+95
+130
+74
+95
+130
+74
+95
+130
+74
+94
+129
+73
+94
+129
+73
+93
+128
+72
+93
+128
+74
+85
+118
+73
+74
+107
+64
+64
+96
+55
+104
+97
+81
+104
+97
+81
+104
+97
+81
+105
+98
+82
+105
+98
+82
+106
+99
+83
+106
+99
+83
+106
+99
+83
+105
+98
+82
+105
+98
+82
+105
+98
+82
+105
+98
+82
+105
+98
+82
+105
+98
+82
+105
+98
+82
+105
+98
+82
+107
+98
+83
+107
+98
+83
+107
+98
+83
+107
+98
+83
+107
+98
+83
+107
+98
+83
+107
+98
+83
+107
+98
+83
+108
+99
+84
+108
+99
+84
+108
+99
+84
+108
+99
+84
+108
+99
+84
+108
+99
+84
+108
+99
+84
+108
+98
+86
+112
+103
+94
+110
+103
+95
+108
+103
+97
+116
+113
+106
+135
+132
+127
+161
+160
+156
+188
+188
+186
+206
+208
+207
+207
+207
+207
+224
+224
+224
+242
+242
+242
+250
+248
+249
+251
+247
+246
+247
+243
+240
+241
+236
+233
+240
+226
+223
+232
+208
+198
+221
+193
+181
+193
+171
+157
+162
+145
+129
+125
+117
+98
+94
+92
+71
+75
+77
+55
+67
+72
+50
+65
+73
+50
+65
+73
+52
+64
+71
+53
+66
+68
+55
+65
+65
+55
+66
+61
+57
+67
+57
+55
+65
+57
+54
+59
+58
+53
+66
+61
+55
+71
+53
+49
+76
+45
+43
+102
+54
+54
+145
+81
+82
+181
+102
+105
+199
+109
+109
+192
+92
+92
+199
+90
+87
+206
+87
+83
+211
+84
+78
+216
+78
+75
+222
+74
+72
+225
+70
+68
+226
+68
+67
+221
+68
+70
+219
+69
+70
+219
+69
+70
+220
+67
+69
+220
+67
+69
+219
+66
+68
+219
+67
+66
+219
+67
+66
+220
+68
+67
+217
+67
+66
+215
+67
+63
+212
+67
+62
+212
+67
+62
+211
+68
+60
+210
+69
+60
+213
+69
+61
+221
+66
+61
+219
+65
+57
+210
+66
+58
+202
+68
+59
+191
+69
+58
+176
+65
+54
+156
+58
+45
+139
+53
+38
+138
+60
+47
+133
+61
+46
+130
+61
+45
+128
+61
+44
+129
+60
+44
+129
+60
+44
+131
+60
+42
+132
+60
+45
+130
+58
+44
+130
+58
+44
+130
+58
+44
+127
+58
+43
+127
+57
+45
+126
+56
+44
+125
+57
+46
+125
+57
+46
+126
+58
+47
+126
+58
+47
+125
+58
+49
+125
+58
+49
+125
+58
+49
+125
+58
+49
+125
+58
+49
+123
+59
+49
+121
+58
+49
+119
+59
+49
+120
+57
+48
+117
+57
+47
+116
+56
+46
+115
+57
+46
+114
+56
+45
+113
+55
+44
+114
+56
+45
+113
+56
+45
+112
+55
+44
+110
+56
+44
+112
+55
+44
+109
+55
+43
+111
+54
+43
+111
+54
+43
+111
+54
+45
+111
+54
+45
+110
+53
+44
+109
+52
+43
+108
+51
+42
+106
+52
+42
+105
+51
+41
+104
+52
+41
+102
+50
+39
+107
+55
+44
+104
+52
+41
+99
+49
+38
+101
+51
+40
+98
+48
+37
+101
+51
+40
+120
+66
+56
+142
+77
+71
+146
+79
+73
+142
+82
+74
+138
+85
+77
+131
+88
+79
+122
+90
+79
+113
+91
+77
+104
+92
+76
+90
+84
+68
+73
+74
+58
+63
+67
+52
+62
+68
+54
+57
+65
+50
+48
+56
+43
+47
+55
+42
+54
+60
+50
+52
+55
+48
+53
+56
+49
+53
+55
+50
+52
+55
+48
+50
+53
+46
+48
+54
+44
+48
+56
+45
+49
+57
+44
+54
+65
+51
+58
+69
+53
+61
+74
+57
+62
+75
+57
+60
+73
+55
+55
+70
+51
+50
+65
+44
+49
+62
+45
+44
+54
+46
+46
+52
+48
+48
+53
+49
+49
+54
+48
+54
+55
+49
+56
+58
+47
+58
+60
+46
+58
+63
+43
+60
+69
+42
+73
+87
+52
+89
+111
+65
+103
+130
+77
+112
+146
+86
+118
+157
+92
+117
+158
+88
+112
+153
+85
+96
+134
+73
+88
+123
+67
+83
+118
+62
+87
+122
+66
+91
+126
+70
+89
+124
+68
+89
+124
+68
+92
+127
+71
+95
+130
+74
+95
+130
+74
+94
+129
+73
+94
+129
+73
+94
+129
+73
+93
+128
+72
+93
+128
+72
+93
+127
+76
+83
+116
+73
+72
+104
+65
+63
+93
+55
+105
+99
+83
+105
+99
+83
+105
+99
+83
+105
+99
+83
+105
+99
+83
+105
+99
+83
+105
+99
+83
+105
+99
+83
+105
+99
+83
+105
+99
+83
+105
+99
+83
+105
+99
+83
+105
+99
+83
+105
+99
+83
+105
+99
+83
+106
+99
+83
+107
+98
+83
+107
+98
+83
+107
+98
+83
+108
+99
+84
+108
+99
+84
+109
+100
+85
+109
+100
+85
+109
+100
+85
+109
+100
+85
+109
+100
+85
+109
+100
+85
+109
+100
+85
+109
+100
+85
+109
+100
+85
+109
+100
+85
+108
+100
+87
+105
+98
+90
+103
+100
+93
+118
+115
+110
+147
+146
+142
+175
+175
+173
+196
+198
+197
+218
+220
+219
+234
+238
+239
+243
+244
+246
+246
+247
+249
+252
+252
+254
+255
+255
+255
+255
+255
+253
+255
+251
+250
+252
+247
+244
+253
+242
+236
+247
+225
+212
+242
+216
+199
+224
+202
+181
+198
+182
+159
+170
+160
+135
+136
+132
+105
+98
+98
+70
+69
+72
+45
+68
+72
+47
+67
+71
+48
+70
+69
+49
+71
+68
+53
+70
+60
+51
+67
+54
+48
+70
+52
+50
+73
+57
+57
+65
+60
+57
+66
+61
+58
+70
+56
+55
+75
+54
+53
+101
+69
+70
+147
+105
+106
+198
+147
+146
+233
+172
+169
+211
+140
+136
+199
+119
+112
+191
+96
+90
+195
+86
+81
+210
+82
+79
+219
+77
+76
+225
+71
+73
+225
+69
+72
+220
+70
+71
+220
+74
+75
+217
+68
+70
+210
+60
+62
+215
+62
+64
+225
+72
+74
+225
+71
+73
+216
+62
+64
+218
+64
+64
+218
+64
+64
+217
+65
+64
+215
+66
+62
+215
+66
+62
+212
+64
+60
+209
+64
+59
+211
+64
+57
+222
+67
+62
+219
+65
+57
+211
+64
+57
+202
+65
+57
+190
+66
+56
+176
+64
+53
+159
+58
+46
+144
+56
+42
+140
+61
+48
+135
+62
+47
+131
+62
+46
+129
+62
+45
+128
+61
+44
+127
+60
+43
+129
+61
+42
+129
+60
+44
+127
+58
+43
+127
+57
+45
+127
+57
+45
+126
+56
+44
+126
+56
+46
+124
+56
+45
+124
+56
+45
+124
+56
+45
+124
+57
+48
+124
+57
+48
+124
+57
+48
+124
+57
+48
+122
+58
+49
+122
+58
+49
+122
+58
+49
+122
+58
+49
+121
+61
+53
+119
+60
+52
+119
+59
+51
+117
+58
+50
+116
+57
+49
+113
+56
+47
+112
+55
+46
+112
+55
+46
+111
+54
+45
+109
+55
+45
+109
+55
+45
+108
+56
+45
+109
+55
+45
+108
+56
+45
+109
+55
+45
+109
+55
+45
+105
+50
+43
+109
+54
+47
+112
+57
+50
+111
+56
+49
+107
+52
+45
+103
+50
+42
+103
+50
+42
+104
+51
+43
+101
+48
+40
+105
+55
+46
+100
+50
+41
+93
+45
+35
+96
+48
+38
+95
+47
+37
+98
+50
+40
+115
+62
+54
+140
+79
+74
+143
+80
+75
+136
+81
+74
+129
+82
+74
+125
+89
+77
+118
+95
+81
+102
+89
+73
+84
+78
+62
+68
+69
+53
+62
+69
+53
+58
+67
+50
+53
+64
+48
+52
+60
+47
+51
+59
+48
+52
+58
+48
+52
+58
+48
+54
+56
+51
+55
+56
+51
+54
+54
+52
+52
+54
+49
+51
+53
+48
+49
+54
+47
+47
+54
+46
+46
+54
+43
+46
+57
+43
+50
+61
+45
+54
+67
+50
+58
+71
+54
+58
+73
+54
+56
+71
+52
+52
+67
+46
+49
+63
+46
+42
+52
+43
+44
+50
+46
+45
+50
+46
+46
+51
+45
+52
+53
+47
+55
+57
+46
+58
+60
+47
+58
+63
+43
+54
+62
+38
+68
+82
+49
+87
+108
+67
+104
+130
+82
+115
+148
+93
+119
+158
+95
+114
+155
+87
+107
+148
+82
+91
+126
+68
+88
+121
+68
+84
+117
+64
+84
+117
+64
+87
+120
+67
+90
+123
+70
+91
+124
+71
+90
+123
+70
+94
+127
+74
+98
+131
+78
+98
+131
+78
+94
+127
+74
+92
+125
+72
+95
+128
+75
+96
+129
+76
+94
+126
+77
+83
+113
+75
+70
+100
+66
+61
+88
+55
+105
+99
+83
+105
+99
+83
+105
+99
+83
+105
+99
+83
+105
+99
+83
+105
+99
+83
+105
+99
+83
+105
+99
+83
+105
+99
+83
+105
+99
+83
+105
+99
+83
+105
+99
+83
+105
+99
+83
+105
+99
+83
+105
+99
+83
+105
+99
+83
+107
+98
+83
+107
+98
+83
+107
+98
+83
+108
+99
+84
+108
+99
+84
+109
+100
+85
+109
+100
+85
+109
+100
+85
+109
+100
+85
+109
+100
+85
+109
+100
+85
+109
+100
+85
+109
+100
+85
+109
+100
+85
+109
+100
+85
+108
+100
+89
+103
+100
+93
+111
+110
+106
+134
+133
+131
+164
+164
+162
+193
+195
+194
+214
+218
+219
+234
+238
+239
+247
+251
+252
+247
+251
+254
+248
+252
+255
+252
+253
+255
+254
+254
+254
+255
+255
+253
+255
+254
+250
+255
+252
+249
+255
+250
+243
+255
+240
+224
+251
+235
+212
+237
+223
+197
+215
+205
+178
+192
+187
+157
+164
+163
+132
+130
+131
+99
+103
+106
+75
+76
+81
+51
+71
+74
+47
+69
+67
+46
+71
+66
+47
+72
+62
+50
+73
+58
+51
+76
+57
+53
+75
+60
+57
+66
+56
+55
+71
+62
+63
+81
+69
+69
+96
+80
+80
+124
+104
+103
+166
+140
+139
+207
+178
+174
+232
+197
+191
+255
+213
+207
+234
+177
+168
+201
+131
+123
+188
+99
+93
+199
+87
+85
+213
+83
+83
+219
+74
+77
+216
+67
+69
+213
+71
+70
+210
+70
+69
+215
+73
+72
+219
+75
+75
+218
+70
+70
+212
+62
+63
+214
+61
+63
+221
+67
+69
+217
+63
+63
+217
+63
+63
+218
+64
+64
+218
+64
+64
+217
+65
+62
+214
+65
+61
+212
+64
+60
+212
+63
+57
+220
+65
+60
+219
+64
+59
+211
+64
+57
+203
+66
+58
+191
+67
+59
+177
+65
+54
+160
+59
+49
+146
+56
+45
+140
+61
+48
+135
+62
+47
+131
+62
+46
+129
+62
+45
+128
+61
+44
+127
+60
+43
+129
+60
+44
+129
+60
+44
+127
+58
+43
+127
+57
+45
+127
+57
+45
+126
+56
+44
+125
+57
+46
+124
+56
+45
+124
+56
+45
+124
+56
+45
+124
+57
+48
+124
+57
+48
+124
+57
+48
+124
+57
+48
+122
+58
+49
+123
+59
+50
+123
+59
+50
+122
+59
+50
+119
+60
+52
+117
+60
+51
+117
+58
+50
+115
+58
+49
+114
+57
+48
+110
+56
+46
+111
+54
+45
+109
+55
+45
+109
+55
+45
+108
+56
+45
+108
+56
+45
+108
+56
+45
+108
+56
+45
+106
+56
+45
+108
+56
+45
+108
+56
+45
+107
+54
+46
+110
+55
+48
+111
+56
+49
+110
+57
+49
+108
+55
+47
+105
+52
+44
+103
+50
+42
+101
+51
+42
+99
+49
+40
+100
+52
+42
+95
+47
+37
+94
+46
+36
+98
+50
+40
+94
+46
+36
+96
+48
+38
+112
+62
+53
+129
+74
+69
+135
+82
+76
+135
+88
+82
+126
+88
+79
+114
+86
+75
+100
+82
+68
+81
+74
+58
+62
+63
+47
+58
+65
+49
+54
+65
+48
+53
+64
+48
+51
+62
+48
+52
+60
+49
+52
+60
+49
+53
+59
+49
+55
+58
+51
+55
+57
+52
+55
+55
+53
+55
+55
+53
+53
+55
+50
+52
+54
+49
+49
+54
+47
+47
+54
+46
+47
+55
+44
+46
+57
+43
+49
+60
+46
+52
+65
+48
+56
+69
+52
+57
+72
+53
+56
+71
+52
+52
+69
+50
+52
+66
+49
+46
+56
+47
+46
+53
+46
+46
+51
+45
+45
+50
+43
+50
+51
+43
+52
+54
+43
+56
+58
+45
+57
+61
+44
+55
+63
+40
+68
+81
+51
+87
+108
+69
+104
+130
+85
+116
+149
+96
+119
+157
+98
+112
+152
+89
+103
+143
+80
+89
+124
+68
+87
+120
+67
+84
+117
+64
+84
+117
+64
+86
+119
+66
+89
+122
+69
+89
+122
+69
+89
+122
+69
+91
+124
+71
+95
+128
+75
+95
+128
+75
+92
+125
+72
+91
+124
+71
+94
+127
+74
+94
+127
+74
+94
+123
+77
+82
+109
+74
+70
+95
+66
+59
+84
+55
+105
+99
+83
+105
+99
+83
+105
+99
+83
+105
+99
+83
+105
+99
+83
+105
+99
+83
+105
+99
+83
+105
+99
+83
+105
+99
+83
+105
+99
+83
+105
+99
+83
+105
+99
+83
+105
+99
+83
+105
+99
+83
+105
+99
+83
+105
+99
+83
+107
+98
+83
+107
+98
+83
+107
+98
+83
+108
+99
+84
+108
+99
+84
+109
+100
+85
+109
+100
+85
+109
+100
+85
+109
+100
+85
+109
+100
+85
+109
+100
+85
+109
+100
+85
+109
+100
+85
+110
+101
+86
+110
+101
+86
+108
+102
+90
+101
+100
+95
+121
+123
+120
+151
+153
+152
+178
+182
+183
+205
+209
+210
+228
+233
+236
+244
+249
+252
+250
+255
+255
+251
+255
+255
+252
+255
+255
+253
+254
+255
+254
+254
+254
+255
+254
+252
+255
+255
+251
+255
+255
+250
+255
+255
+244
+254
+252
+231
+250
+249
+221
+239
+240
+209
+225
+229
+196
+210
+216
+180
+188
+196
+159
+160
+168
+131
+135
+145
+108
+96
+103
+69
+81
+88
+55
+68
+71
+44
+68
+67
+46
+74
+68
+52
+76
+68
+55
+75
+65
+56
+73
+62
+58
+68
+58
+57
+84
+74
+75
+107
+95
+95
+130
+118
+118
+157
+146
+144
+192
+178
+175
+219
+206
+200
+234
+220
+211
+248
+228
+217
+255
+240
+229
+255
+224
+214
+234
+167
+159
+190
+101
+97
+177
+67
+68
+198
+72
+75
+219
+86
+89
+216
+88
+85
+207
+79
+76
+202
+70
+66
+204
+69
+66
+210
+70
+69
+214
+70
+70
+216
+68
+68
+217
+67
+68
+214
+61
+63
+216
+62
+64
+217
+63
+63
+217
+63
+63
+217
+65
+64
+214
+64
+63
+213
+65
+61
+213
+64
+58
+217
+64
+58
+217
+64
+58
+210
+66
+58
+203
+69
+60
+192
+68
+60
+178
+66
+55
+161
+60
+50
+147
+57
+46
+142
+60
+48
+137
+61
+48
+131
+62
+47
+129
+62
+46
+127
+61
+45
+126
+60
+44
+128
+61
+45
+128
+61
+45
+127
+57
+45
+127
+57
+45
+126
+58
+47
+125
+57
+46
+125
+57
+46
+124
+56
+45
+123
+56
+47
+123
+56
+47
+125
+58
+49
+125
+58
+49
+123
+59
+50
+123
+59
+50
+123
+59
+50
+123
+59
+50
+122
+59
+52
+120
+60
+52
+116
+59
+50
+113
+59
+49
+114
+57
+48
+111
+57
+47
+110
+56
+46
+108
+56
+45
+108
+54
+44
+107
+55
+44
+108
+56
+45
+106
+56
+45
+106
+56
+45
+106
+56
+45
+106
+56
+45
+105
+57
+45
+106
+56
+45
+106
+56
+45
+110
+57
+49
+109
+56
+48
+109
+56
+48
+109
+56
+48
+109
+56
+48
+105
+55
+46
+102
+52
+43
+99
+49
+40
+100
+50
+41
+97
+49
+39
+93
+45
+35
+95
+48
+38
+99
+52
+42
+92
+45
+35
+95
+48
+38
+115
+68
+60
+125
+80
+74
+129
+86
+80
+126
+89
+81
+112
+84
+73
+94
+74
+63
+79
+67
+55
+63
+60
+45
+52
+54
+40
+50
+59
+42
+48
+59
+43
+49
+60
+46
+50
+61
+47
+52
+60
+49
+52
+60
+49
+53
+59
+49
+55
+58
+51
+55
+57
+52
+55
+57
+54
+54
+56
+51
+53
+55
+50
+53
+55
+50
+50
+55
+48
+48
+55
+47
+48
+56
+45
+46
+57
+43
+48
+59
+45
+50
+63
+46
+54
+67
+50
+55
+69
+52
+56
+71
+52
+56
+71
+52
+57
+70
+53
+52
+62
+51
+51
+58
+50
+47
+52
+45
+44
+50
+40
+47
+48
+40
+49
+51
+40
+53
+55
+42
+54
+58
+41
+54
+62
+39
+68
+81
+53
+89
+109
+74
+107
+132
+90
+119
+151
+102
+119
+156
+102
+108
+147
+90
+95
+135
+75
+87
+120
+67
+87
+117
+67
+84
+114
+64
+84
+114
+64
+86
+116
+66
+88
+118
+68
+89
+119
+69
+89
+119
+69
+90
+120
+70
+93
+123
+73
+95
+125
+75
+93
+123
+73
+93
+123
+73
+95
+125
+75
+94
+124
+74
+90
+119
+75
+78
+101
+72
+65
+87
+64
+54
+76
+53
+105
+99
+83
+105
+99
+83
+105
+99
+83
+105
+99
+83
+105
+99
+83
+105
+99
+83
+105
+99
+83
+105
+99
+83
+105
+99
+83
+105
+99
+83
+105
+99
+83
+105
+99
+83
+105
+99
+83
+105
+99
+83
+105
+99
+83
+105
+99
+83
+106
+99
+83
+107
+98
+83
+107
+98
+83
+108
+99
+84
+108
+99
+84
+109
+100
+85
+109
+100
+85
+109
+100
+85
+109
+100
+85
+109
+100
+85
+109
+100
+85
+110
+101
+86
+110
+101
+86
+110
+101
+86
+110
+101
+86
+109
+103
+91
+106
+107
+102
+131
+135
+136
+163
+167
+168
+185
+190
+193
+208
+213
+216
+229
+237
+239
+243
+251
+253
+245
+253
+255
+251
+255
+255
+251
+255
+255
+252
+255
+255
+252
+254
+251
+253
+254
+249
+254
+253
+248
+255
+254
+247
+255
+255
+243
+248
+253
+230
+244
+253
+222
+238
+247
+216
+230
+242
+206
+221
+233
+195
+206
+218
+180
+182
+193
+153
+161
+171
+134
+128
+135
+101
+102
+109
+76
+77
+81
+54
+70
+72
+48
+72
+74
+53
+75
+73
+58
+72
+68
+57
+68
+64
+55
+80
+70
+68
+106
+96
+95
+139
+129
+128
+164
+154
+153
+183
+175
+172
+203
+198
+194
+223
+218
+212
+234
+230
+221
+247
+238
+229
+255
+249
+239
+255
+246
+235
+255
+215
+207
+245
+178
+172
+227
+141
+140
+200
+100
+100
+176
+68
+66
+194
+83
+76
+200
+85
+78
+199
+82
+73
+195
+72
+65
+199
+72
+66
+211
+77
+74
+213
+74
+71
+207
+63
+62
+210
+62
+62
+212
+62
+63
+213
+63
+62
+216
+64
+63
+214
+64
+63
+214
+64
+63
+213
+65
+61
+213
+65
+61
+214
+62
+57
+213
+64
+58
+210
+67
+61
+204
+69
+63
+192
+69
+62
+178
+65
+57
+162
+61
+53
+149
+59
+50
+142
+60
+49
+137
+61
+48
+131
+62
+47
+129
+62
+46
+127
+61
+47
+126
+60
+44
+128
+61
+45
+128
+61
+45
+127
+57
+45
+127
+57
+45
+126
+58
+47
+125
+57
+46
+125
+57
+46
+124
+56
+45
+123
+56
+47
+123
+56
+47
+126
+59
+50
+126
+59
+50
+124
+60
+51
+123
+59
+50
+123
+59
+50
+123
+59
+50
+122
+59
+52
+120
+60
+52
+114
+57
+48
+111
+57
+47
+111
+57
+47
+109
+57
+46
+108
+56
+45
+107
+55
+44
+106
+54
+43
+104
+54
+43
+105
+55
+44
+105
+55
+44
+105
+55
+44
+104
+56
+44
+104
+56
+44
+104
+56
+44
+104
+56
+44
+104
+56
+44
+109
+59
+50
+108
+55
+47
+106
+53
+45
+105
+55
+46
+106
+56
+47
+106
+56
+47
+102
+52
+43
+97
+49
+39
+101
+53
+43
+97
+50
+40
+93
+46
+36
+97
+50
+40
+98
+51
+41
+89
+42
+32
+97
+50
+40
+121
+78
+69
+129
+92
+86
+118
+87
+82
+105
+78
+71
+87
+67
+58
+73
+60
+51
+64
+58
+46
+58
+59
+45
+56
+60
+46
+48
+56
+41
+47
+58
+42
+51
+59
+46
+52
+60
+47
+53
+61
+50
+53
+59
+49
+54
+57
+48
+54
+57
+48
+55
+57
+52
+54
+56
+51
+54
+56
+51
+52
+57
+50
+51
+56
+49
+51
+57
+47
+49
+57
+46
+49
+57
+46
+46
+57
+43
+47
+58
+44
+48
+61
+44
+50
+63
+46
+53
+66
+49
+55
+69
+52
+59
+72
+54
+60
+73
+56
+57
+67
+56
+55
+63
+52
+50
+56
+46
+45
+51
+39
+46
+48
+37
+47
+49
+36
+50
+52
+38
+52
+56
+39
+52
+60
+39
+69
+82
+56
+93
+112
+80
+114
+139
+100
+123
+154
+110
+119
+156
+105
+102
+141
+88
+85
+124
+69
+83
+115
+65
+84
+114
+64
+83
+113
+63
+83
+113
+63
+84
+114
+64
+85
+115
+65
+86
+116
+66
+86
+116
+66
+87
+117
+67
+91
+121
+71
+93
+123
+73
+92
+122
+72
+94
+124
+74
+95
+125
+75
+92
+122
+72
+87
+114
+73
+73
+93
+68
+61
+78
+60
+49
+66
+48
+103
+100
+83
+103
+100
+83
+103
+100
+83
+103
+100
+83
+103
+100
+83
+103
+100
+83
+103
+100
+83
+103
+100
+83
+103
+100
+83
+103
+100
+83
+103
+100
+83
+103
+100
+83
+103
+100
+83
+103
+100
+83
+103
+100
+83
+105
+99
+83
+106
+99
+83
+107
+98
+83
+107
+98
+83
+108
+99
+84
+108
+99
+84
+109
+100
+85
+109
+100
+85
+109
+100
+85
+109
+100
+85
+109
+100
+85
+109
+100
+85
+110
+101
+86
+110
+101
+86
+111
+102
+87
+111
+102
+87
+110
+103
+93
+113
+113
+111
+135
+140
+143
+164
+169
+172
+183
+191
+194
+205
+213
+216
+227
+237
+239
+242
+252
+254
+244
+254
+255
+248
+255
+255
+250
+255
+255
+251
+255
+252
+253
+255
+250
+252
+253
+245
+250
+252
+241
+249
+249
+237
+246
+248
+234
+246
+255
+232
+243
+255
+228
+240
+253
+225
+238
+249
+217
+233
+244
+210
+222
+232
+197
+202
+210
+173
+182
+190
+153
+157
+163
+129
+125
+130
+98
+89
+93
+66
+71
+76
+53
+70
+75
+55
+70
+74
+57
+67
+71
+57
+65
+67
+56
+98
+95
+88
+133
+125
+122
+170
+162
+159
+192
+184
+181
+203
+195
+193
+213
+208
+205
+230
+225
+221
+241
+238
+233
+249
+246
+239
+250
+243
+233
+251
+237
+226
+255
+236
+227
+255
+242
+234
+255
+224
+219
+233
+165
+162
+182
+105
+99
+164
+76
+64
+178
+82
+68
+192
+90
+78
+199
+92
+82
+197
+83
+73
+190
+69
+61
+193
+64
+59
+202
+67
+64
+203
+64
+61
+206
+64
+62
+209
+63
+63
+210
+64
+64
+211
+66
+63
+211
+66
+63
+211
+66
+63
+211
+66
+61
+211
+63
+59
+210
+65
+60
+208
+69
+64
+201
+69
+64
+189
+67
+62
+175
+64
+57
+160
+62
+53
+149
+61
+51
+142
+60
+49
+137
+60
+50
+131
+61
+49
+129
+61
+48
+127
+61
+49
+126
+60
+46
+127
+61
+47
+127
+61
+47
+126
+58
+47
+126
+58
+47
+126
+58
+47
+125
+57
+46
+124
+57
+48
+123
+56
+47
+123
+56
+47
+123
+56
+47
+124
+60
+51
+124
+60
+51
+124
+60
+51
+123
+59
+50
+122
+59
+52
+121
+58
+51
+121
+58
+51
+119
+59
+51
+110
+55
+48
+109
+56
+48
+108
+55
+47
+108
+55
+47
+107
+54
+46
+104
+54
+45
+104
+54
+45
+104
+54
+45
+105
+55
+46
+104
+56
+46
+104
+56
+46
+103
+56
+46
+103
+56
+46
+103
+56
+46
+103
+56
+46
+104
+56
+46
+107
+57
+50
+104
+54
+47
+102
+52
+45
+103
+53
+46
+105
+55
+48
+104
+55
+48
+101
+52
+45
+98
+49
+42
+99
+50
+43
+98
+51
+43
+95
+48
+40
+93
+49
+40
+93
+49
+40
+86
+42
+33
+98
+54
+45
+123
+85
+76
+116
+89
+82
+97
+78
+72
+78
+63
+56
+65
+55
+46
+61
+54
+44
+59
+57
+45
+57
+59
+46
+57
+60
+49
+51
+57
+45
+51
+59
+46
+53
+59
+47
+54
+60
+48
+54
+60
+48
+55
+58
+47
+53
+56
+45
+52
+55
+46
+54
+57
+48
+52
+57
+50
+51
+56
+49
+51
+57
+47
+51
+57
+47
+50
+58
+47
+49
+57
+46
+49
+57
+44
+46
+57
+43
+46
+57
+43
+47
+58
+44
+48
+59
+45
+51
+62
+46
+54
+67
+50
+58
+69
+53
+60
+71
+55
+61
+69
+56
+58
+66
+53
+53
+59
+47
+48
+54
+40
+48
+50
+37
+47
+49
+36
+49
+51
+37
+49
+53
+36
+50
+58
+37
+71
+83
+59
+98
+117
+87
+119
+143
+107
+124
+155
+114
+113
+149
+103
+92
+130
+81
+74
+112
+61
+79
+111
+62
+81
+110
+62
+81
+110
+62
+81
+110
+62
+81
+110
+62
+81
+110
+62
+83
+112
+64
+83
+112
+64
+87
+116
+68
+91
+120
+72
+93
+122
+74
+93
+122
+74
+95
+124
+76
+95
+124
+76
+90
+119
+71
+82
+108
+69
+65
+82
+63
+54
+67
+57
+43
+56
+46
+103
+100
+83
+103
+100
+83
+103
+100
+83
+103
+100
+83
+103
+100
+83
+103
+100
+83
+103
+100
+83
+103
+100
+83
+103
+100
+83
+103
+100
+83
+103
+100
+83
+103
+100
+83
+103
+100
+83
+103
+100
+83
+103
+100
+83
+105
+99
+83
+106
+99
+83
+107
+98
+83
+107
+98
+83
+108
+99
+84
+108
+99
+84
+109
+100
+85
+109
+100
+85
+109
+100
+85
+109
+100
+85
+109
+100
+85
+110
+101
+86
+110
+101
+86
+111
+102
+87
+112
+103
+88
+112
+103
+88
+110
+103
+93
+108
+110
+109
+122
+130
+133
+147
+154
+160
+171
+181
+183
+196
+206
+208
+220
+230
+232
+237
+247
+249
+244
+254
+255
+245
+254
+253
+246
+255
+252
+250
+255
+250
+251
+255
+249
+251
+254
+243
+248
+250
+237
+245
+246
+232
+241
+244
+227
+244
+253
+234
+244
+253
+232
+244
+252
+229
+243
+249
+223
+242
+246
+219
+233
+236
+205
+216
+215
+185
+197
+196
+165
+177
+176
+146
+143
+142
+114
+101
+103
+79
+77
+80
+59
+71
+75
+58
+70
+77
+61
+71
+79
+66
+74
+82
+71
+122
+123
+115
+158
+155
+148
+195
+190
+184
+215
+207
+204
+222
+212
+211
+230
+220
+219
+243
+235
+233
+252
+247
+244
+243
+240
+235
+254
+251
+244
+255
+255
+246
+255
+251
+241
+255
+243
+234
+255
+237
+229
+255
+226
+218
+255
+210
+199
+212
+143
+127
+181
+100
+81
+162
+75
+58
+178
+85
+70
+190
+88
+74
+182
+71
+60
+182
+63
+55
+199
+74
+68
+199
+67
+62
+202
+67
+63
+205
+66
+63
+208
+66
+64
+208
+66
+62
+208
+66
+62
+208
+66
+62
+208
+65
+61
+210
+65
+60
+210
+67
+63
+206
+68
+65
+197
+68
+63
+184
+65
+61
+170
+61
+56
+158
+59
+53
+149
+60
+52
+142
+59
+51
+137
+60
+50
+131
+61
+51
+129
+61
+50
+127
+61
+49
+126
+60
+48
+127
+61
+49
+127
+61
+47
+126
+58
+47
+126
+58
+47
+126
+58
+47
+125
+57
+46
+124
+57
+48
+123
+56
+47
+123
+56
+47
+123
+56
+47
+124
+60
+51
+123
+59
+50
+123
+59
+50
+122
+58
+49
+121
+58
+51
+120
+57
+50
+119
+56
+49
+117
+57
+49
+110
+55
+48
+108
+55
+47
+108
+55
+47
+106
+56
+47
+105
+55
+46
+105
+55
+46
+104
+54
+45
+103
+55
+45
+103
+55
+45
+103
+55
+45
+102
+55
+45
+102
+55
+45
+102
+55
+45
+102
+55
+45
+102
+55
+45
+102
+55
+45
+104
+55
+48
+104
+54
+47
+103
+53
+46
+103
+53
+46
+103
+54
+47
+104
+55
+48
+103
+54
+47
+102
+53
+46
+97
+50
+42
+101
+54
+46
+94
+50
+41
+92
+48
+39
+96
+52
+43
+97
+53
+44
+105
+61
+52
+117
+83
+74
+88
+71
+64
+69
+62
+54
+60
+53
+47
+57
+53
+44
+59
+56
+47
+56
+58
+47
+53
+55
+44
+51
+54
+43
+54
+57
+46
+53
+59
+47
+55
+58
+47
+54
+57
+46
+54
+57
+46
+53
+56
+45
+53
+55
+44
+51
+54
+43
+50
+56
+44
+49
+57
+44
+50
+56
+46
+49
+57
+44
+49
+57
+46
+49
+57
+44
+49
+57
+44
+49
+57
+44
+46
+57
+43
+46
+57
+43
+46
+57
+43
+47
+58
+44
+48
+59
+43
+51
+62
+46
+54
+65
+49
+55
+66
+50
+60
+68
+53
+58
+67
+50
+56
+63
+47
+53
+59
+45
+52
+54
+41
+50
+52
+39
+49
+51
+37
+48
+52
+37
+48
+55
+37
+72
+84
+62
+101
+120
+92
+117
+141
+109
+116
+146
+108
+102
+137
+95
+82
+119
+75
+66
+104
+57
+75
+107
+60
+78
+107
+59
+80
+109
+61
+80
+109
+61
+78
+107
+59
+78
+107
+59
+79
+108
+60
+81
+110
+62
+86
+115
+67
+90
+119
+71
+93
+122
+74
+94
+123
+75
+95
+124
+76
+95
+124
+76
+86
+115
+67
+78
+102
+66
+59
+73
+56
+48
+59
+51
+38
+47
+42
+103
+100
+83
+103
+100
+83
+103
+100
+83
+103
+100
+83
+103
+100
+83
+103
+100
+83
+103
+100
+83
+103
+100
+83
+103
+100
+83
+103
+100
+83
+103
+100
+83
+103
+100
+83
+103
+100
+83
+103
+100
+83
+103
+100
+83
+105
+99
+83
+106
+99
+83
+107
+98
+83
+107
+98
+83
+108
+99
+84
+108
+99
+84
+109
+100
+85
+109
+100
+85
+109
+100
+85
+109
+100
+85
+109
+100
+85
+110
+101
+86
+110
+101
+86
+111
+102
+87
+112
+103
+88
+113
+104
+89
+111
+104
+94
+104
+105
+107
+109
+116
+122
+133
+140
+148
+163
+172
+177
+191
+200
+205
+211
+222
+226
+229
+240
+242
+240
+252
+252
+242
+252
+251
+245
+254
+249
+248
+255
+247
+250
+255
+246
+252
+255
+242
+250
+253
+236
+248
+249
+231
+246
+247
+231
+246
+246
+234
+247
+247
+235
+250
+247
+232
+252
+246
+230
+253
+245
+226
+247
+236
+214
+231
+216
+195
+213
+198
+175
+192
+177
+154
+158
+147
+125
+117
+110
+91
+90
+87
+70
+80
+81
+67
+83
+86
+75
+91
+98
+90
+99
+109
+100
+146
+154
+141
+176
+179
+168
+210
+207
+198
+230
+223
+217
+242
+228
+227
+249
+235
+235
+255
+241
+244
+255
+248
+249
+255
+253
+251
+255
+251
+248
+249
+248
+243
+247
+247
+237
+251
+249
+237
+255
+252
+240
+255
+253
+241
+255
+249
+234
+255
+224
+203
+234
+168
+144
+183
+111
+89
+168
+87
+68
+174
+85
+69
+183
+82
+70
+185
+77
+65
+191
+74
+65
+195
+71
+63
+198
+69
+63
+202
+69
+64
+203
+68
+64
+205
+68
+62
+204
+67
+61
+203
+66
+60
+204
+65
+60
+209
+67
+63
+208
+69
+64
+204
+69
+65
+194
+67
+61
+179
+61
+57
+166
+59
+53
+156
+59
+53
+149
+60
+54
+140
+60
+51
+135
+61
+52
+133
+60
+53
+129
+61
+52
+127
+60
+51
+126
+60
+48
+127
+61
+49
+127
+61
+49
+126
+58
+47
+126
+58
+47
+126
+58
+47
+125
+57
+46
+124
+57
+48
+123
+56
+47
+123
+56
+47
+123
+56
+47
+123
+59
+50
+123
+59
+50
+121
+58
+51
+120
+57
+50
+119
+56
+49
+118
+55
+48
+118
+55
+48
+115
+55
+47
+110
+55
+48
+106
+56
+47
+106
+56
+47
+106
+56
+47
+106
+56
+47
+104
+56
+46
+104
+56
+46
+104
+56
+46
+103
+55
+45
+102
+55
+45
+102
+55
+45
+102
+55
+45
+100
+56
+45
+100
+56
+45
+100
+56
+45
+102
+55
+45
+103
+54
+47
+104
+55
+48
+105
+56
+49
+105
+56
+49
+104
+55
+48
+105
+56
+49
+106
+59
+51
+108
+61
+53
+103
+56
+48
+107
+60
+52
+98
+54
+45
+97
+53
+44
+111
+67
+58
+120
+76
+67
+116
+73
+64
+110
+77
+68
+67
+57
+48
+53
+54
+46
+52
+53
+47
+56
+57
+49
+56
+59
+50
+52
+55
+46
+49
+52
+43
+50
+53
+44
+53
+56
+45
+53
+56
+45
+53
+55
+44
+52
+54
+43
+52
+54
+43
+52
+54
+43
+52
+54
+41
+51
+55
+41
+47
+55
+40
+46
+57
+41
+48
+56
+43
+46
+57
+41
+46
+57
+43
+46
+57
+41
+48
+56
+41
+48
+56
+41
+49
+57
+42
+48
+56
+41
+48
+56
+43
+47
+55
+42
+48
+56
+43
+49
+57
+44
+51
+59
+46
+52
+60
+45
+57
+66
+49
+58
+67
+48
+59
+66
+48
+58
+65
+49
+58
+60
+46
+54
+56
+42
+50
+52
+38
+47
+51
+36
+50
+57
+39
+73
+85
+63
+99
+117
+91
+109
+132
+103
+102
+132
+98
+87
+121
+84
+73
+110
+69
+63
+100
+56
+72
+103
+59
+76
+105
+59
+78
+107
+61
+78
+107
+61
+76
+105
+59
+76
+105
+59
+77
+106
+60
+79
+108
+62
+85
+114
+68
+89
+118
+72
+91
+120
+74
+93
+122
+76
+94
+123
+77
+92
+121
+75
+81
+110
+64
+71
+95
+59
+54
+66
+52
+43
+52
+47
+34
+40
+38
+103
+100
+83
+103
+100
+83
+103
+100
+83
+103
+100
+83
+103
+100
+83
+103
+100
+83
+103
+100
+83
+103
+100
+83
+103
+100
+83
+103
+100
+83
+103
+100
+83
+103
+100
+83
+103
+100
+83
+103
+100
+83
+103
+100
+83
+105
+99
+83
+106
+99
+83
+106
+99
+83
+106
+98
+85
+108
+98
+86
+108
+98
+86
+109
+99
+87
+109
+100
+85
+109
+100
+85
+109
+100
+85
+108
+101
+85
+109
+102
+86
+110
+103
+87
+111
+103
+90
+110
+104
+92
+111
+104
+94
+109
+106
+101
+107
+111
+114
+109
+116
+122
+131
+138
+144
+165
+174
+179
+195
+204
+209
+213
+223
+225
+230
+238
+241
+244
+252
+254
+244
+253
+250
+247
+253
+249
+249
+254
+247
+250
+255
+244
+252
+255
+242
+252
+255
+241
+252
+255
+238
+253
+254
+240
+251
+248
+239
+254
+250
+241
+255
+249
+239
+255
+250
+237
+255
+249
+233
+255
+242
+223
+239
+224
+203
+221
+206
+183
+193
+178
+155
+162
+151
+129
+124
+117
+98
+98
+95
+78
+88
+90
+76
+93
+99
+87
+109
+119
+110
+124
+134
+125
+165
+173
+162
+187
+193
+181
+215
+215
+207
+235
+230
+226
+250
+238
+238
+255
+244
+244
+255
+245
+247
+254
+244
+245
+253
+247
+247
+250
+249
+247
+250
+252
+247
+251
+255
+249
+250
+253
+244
+244
+247
+238
+247
+249
+238
+255
+252
+239
+255
+242
+225
+255
+242
+224
+250
+201
+184
+188
+129
+113
+157
+85
+71
+171
+85
+72
+183
+85
+74
+177
+69
+59
+192
+74
+64
+198
+71
+64
+201
+70
+62
+202
+69
+62
+202
+67
+61
+201
+66
+60
+199
+66
+59
+200
+65
+59
+207
+70
+62
+205
+71
+62
+199
+71
+62
+188
+67
+59
+173
+62
+53
+159
+58
+50
+149
+59
+51
+145
+62
+54
+138
+61
+53
+132
+62
+52
+130
+62
+53
+129
+61
+52
+127
+60
+51
+126
+60
+48
+128
+60
+49
+128
+60
+49
+126
+58
+47
+126
+58
+47
+126
+58
+49
+125
+57
+48
+124
+57
+48
+123
+56
+47
+123
+56
+47
+123
+56
+47
+122
+58
+49
+122
+58
+49
+120
+57
+50
+119
+56
+49
+118
+55
+48
+117
+54
+47
+117
+54
+47
+113
+54
+46
+109
+56
+48
+107
+57
+48
+106
+56
+47
+106
+56
+47
+105
+57
+47
+105
+57
+47
+105
+57
+47
+104
+56
+46
+103
+55
+45
+102
+55
+45
+103
+55
+45
+102
+55
+45
+102
+55
+45
+102
+55
+45
+102
+55
+45
+102
+55
+45
+102
+53
+46
+106
+56
+49
+109
+59
+52
+107
+58
+51
+106
+57
+50
+106
+58
+48
+109
+62
+52
+111
+67
+56
+108
+64
+53
+111
+68
+59
+100
+60
+50
+99
+61
+50
+122
+86
+74
+134
+100
+90
+121
+87
+77
+98
+76
+65
+62
+58
+49
+51
+56
+49
+52
+57
+50
+55
+60
+53
+52
+58
+48
+47
+53
+43
+50
+53
+44
+57
+60
+51
+51
+54
+43
+50
+53
+42
+50
+52
+41
+48
+51
+40
+49
+51
+40
+50
+53
+42
+52
+54
+43
+52
+55
+44
+46
+54
+41
+44
+55
+41
+47
+55
+42
+45
+56
+42
+47
+55
+42
+47
+55
+42
+47
+55
+42
+47
+55
+42
+49
+57
+44
+48
+56
+43
+48
+56
+45
+47
+55
+44
+47
+55
+44
+47
+55
+44
+48
+56
+45
+48
+56
+43
+55
+63
+48
+57
+66
+49
+60
+69
+52
+61
+68
+52
+59
+65
+51
+56
+60
+46
+50
+54
+39
+45
+52
+36
+50
+59
+42
+74
+86
+66
+99
+114
+91
+104
+124
+97
+93
+118
+88
+79
+109
+75
+70
+102
+65
+65
+97
+58
+72
+100
+59
+75
+104
+60
+78
+107
+63
+78
+107
+63
+75
+104
+60
+74
+103
+57
+76
+105
+61
+78
+107
+61
+84
+113
+69
+87
+116
+72
+90
+119
+75
+91
+120
+76
+93
+122
+78
+90
+118
+77
+78
+106
+65
+67
+91
+59
+50
+62
+52
+41
+47
+47
+31
+37
+37
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+106
+100
+86
+106
+100
+86
+106
+100
+88
+108
+100
+89
+108
+99
+90
+109
+101
+90
+109
+101
+88
+109
+102
+86
+103
+96
+78
+106
+101
+82
+110
+107
+88
+111
+108
+93
+104
+101
+92
+102
+101
+97
+115
+113
+114
+129
+130
+134
+137
+142
+146
+149
+157
+160
+170
+178
+181
+194
+199
+202
+215
+220
+223
+233
+237
+238
+245
+246
+248
+248
+250
+249
+252
+254
+253
+254
+254
+252
+255
+255
+250
+253
+254
+246
+250
+253
+242
+249
+252
+241
+250
+253
+242
+251
+254
+243
+249
+250
+242
+250
+250
+242
+249
+249
+237
+252
+250
+235
+254
+252
+231
+249
+247
+222
+233
+229
+202
+213
+212
+182
+186
+185
+155
+152
+152
+124
+113
+116
+89
+95
+100
+77
+98
+107
+88
+114
+125
+108
+132
+144
+130
+145
+155
+144
+180
+185
+178
+202
+204
+199
+226
+227
+222
+240
+239
+235
+247
+243
+242
+251
+247
+246
+253
+249
+248
+252
+248
+247
+255
+254
+252
+254
+254
+252
+254
+254
+252
+253
+255
+250
+254
+255
+250
+254
+255
+250
+254
+255
+250
+254
+255
+250
+251
+253
+248
+255
+253
+248
+255
+251
+246
+255
+229
+223
+215
+166
+159
+163
+96
+88
+155
+68
+61
+178
+75
+66
+193
+79
+69
+195
+71
+61
+198
+67
+57
+201
+68
+59
+205
+72
+63
+206
+73
+64
+203
+72
+64
+202
+71
+61
+198
+71
+56
+195
+72
+56
+190
+73
+56
+181
+71
+56
+166
+69
+53
+154
+66
+52
+144
+66
+53
+139
+67
+53
+133
+67
+53
+129
+67
+54
+127
+65
+52
+127
+63
+51
+128
+62
+50
+128
+60
+49
+129
+59
+49
+129
+59
+49
+127
+57
+49
+126
+58
+49
+124
+57
+49
+123
+56
+48
+122
+55
+47
+122
+55
+47
+119
+55
+46
+118
+54
+45
+119
+55
+46
+119
+55
+46
+119
+56
+47
+119
+56
+47
+118
+55
+46
+117
+54
+45
+113
+53
+43
+110
+51
+43
+108
+55
+47
+105
+56
+49
+105
+56
+49
+104
+55
+48
+104
+55
+48
+103
+54
+47
+103
+54
+47
+103
+54
+47
+102
+53
+46
+103
+54
+47
+105
+55
+48
+105
+56
+49
+104
+55
+48
+103
+54
+47
+101
+52
+45
+101
+51
+44
+104
+51
+45
+106
+53
+47
+109
+56
+48
+107
+57
+48
+106
+58
+48
+105
+59
+46
+105
+61
+48
+107
+65
+51
+103
+66
+50
+106
+73
+58
+100
+72
+58
+118
+95
+79
+126
+107
+92
+138
+120
+106
+140
+127
+111
+82
+74
+61
+55
+57
+46
+52
+58
+48
+52
+58
+48
+51
+57
+47
+51
+57
+47
+51
+57
+47
+50
+56
+46
+50
+56
+46
+49
+55
+45
+49
+55
+45
+51
+54
+45
+48
+54
+44
+50
+53
+44
+47
+53
+43
+49
+52
+43
+47
+53
+43
+47
+52
+45
+46
+53
+45
+47
+52
+45
+46
+53
+45
+47
+52
+45
+47
+52
+45
+47
+52
+45
+47
+52
+45
+48
+53
+46
+47
+52
+45
+47
+52
+45
+46
+51
+44
+46
+51
+44
+47
+52
+45
+47
+52
+45
+47
+54
+46
+49
+59
+50
+51
+61
+50
+54
+64
+53
+56
+66
+55
+57
+68
+54
+55
+66
+52
+53
+64
+48
+51
+62
+45
+52
+63
+46
+68
+81
+61
+87
+101
+78
+91
+107
+81
+80
+98
+72
+69
+88
+60
+64
+84
+56
+66
+87
+54
+73
+99
+62
+75
+101
+62
+75
+102
+61
+75
+102
+61
+74
+101
+60
+74
+101
+58
+76
+103
+62
+79
+106
+63
+85
+112
+71
+89
+116
+75
+92
+118
+79
+93
+119
+80
+93
+119
+82
+87
+113
+78
+72
+98
+63
+59
+79
+54
+37
+48
+42
+38
+43
+46
+36
+41
+44
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+106
+99
+89
+107
+100
+90
+108
+99
+92
+109
+100
+91
+109
+101
+90
+109
+102
+86
+105
+100
+81
+106
+104
+83
+109
+106
+87
+106
+107
+91
+103
+103
+95
+108
+108
+108
+126
+127
+132
+144
+147
+154
+167
+174
+180
+183
+193
+195
+208
+213
+216
+225
+230
+233
+241
+242
+244
+250
+251
+253
+255
+254
+255
+255
+254
+255
+254
+253
+251
+255
+254
+250
+255
+255
+250
+254
+255
+249
+251
+252
+244
+248
+251
+242
+246
+252
+242
+247
+253
+243
+247
+250
+241
+248
+250
+239
+248
+250
+237
+247
+250
+233
+249
+251
+229
+242
+245
+218
+223
+226
+195
+204
+208
+175
+180
+184
+151
+145
+150
+118
+107
+113
+85
+89
+97
+73
+95
+107
+85
+116
+129
+111
+140
+152
+138
+157
+167
+156
+191
+193
+188
+211
+211
+209
+231
+231
+229
+243
+243
+241
+247
+247
+245
+251
+251
+249
+252
+252
+250
+251
+251
+249
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+251
+255
+254
+241
+255
+255
+237
+251
+252
+247
+249
+248
+255
+248
+247
+255
+233
+230
+239
+190
+185
+196
+128
+119
+164
+80
+70
+176
+78
+65
+186
+76
+63
+193
+75
+63
+196
+74
+61
+194
+68
+56
+188
+61
+52
+190
+63
+54
+196
+70
+58
+196
+70
+55
+195
+74
+55
+191
+76
+58
+180
+73
+55
+166
+70
+54
+153
+67
+50
+144
+68
+54
+138
+71
+55
+130
+68
+55
+127
+67
+56
+126
+66
+55
+124
+64
+53
+126
+62
+52
+127
+60
+51
+128
+60
+49
+128
+60
+51
+125
+58
+50
+125
+58
+50
+122
+58
+49
+122
+58
+49
+121
+57
+48
+120
+56
+47
+118
+55
+46
+118
+55
+46
+117
+54
+45
+118
+55
+46
+116
+56
+46
+116
+56
+46
+116
+56
+46
+114
+54
+44
+111
+53
+42
+109
+52
+43
+108
+55
+47
+105
+56
+49
+106
+56
+49
+104
+55
+48
+105
+55
+48
+104
+55
+48
+103
+54
+47
+103
+54
+47
+101
+51
+44
+101
+51
+44
+103
+53
+46
+104
+54
+47
+106
+56
+49
+106
+56
+49
+106
+56
+49
+107
+57
+50
+107
+54
+48
+108
+55
+49
+107
+57
+48
+107
+59
+49
+107
+59
+47
+106
+62
+49
+106
+64
+48
+105
+68
+50
+103
+72
+54
+107
+80
+61
+103
+82
+65
+117
+102
+83
+129
+117
+101
+140
+133
+115
+134
+131
+114
+75
+76
+60
+54
+57
+46
+51
+57
+47
+51
+57
+47
+51
+57
+47
+50
+56
+46
+50
+56
+46
+50
+56
+46
+49
+55
+45
+49
+55
+45
+49
+55
+45
+49
+55
+45
+48
+54
+44
+48
+54
+44
+47
+53
+43
+47
+53
+43
+47
+53
+43
+47
+52
+46
+47
+52
+46
+47
+52
+46
+47
+52
+46
+47
+52
+46
+47
+52
+46
+47
+52
+46
+47
+52
+46
+48
+53
+47
+47
+52
+46
+46
+51
+45
+46
+51
+45
+46
+51
+45
+46
+51
+45
+47
+52
+46
+47
+54
+47
+46
+56
+48
+47
+58
+50
+49
+61
+51
+52
+64
+54
+54
+66
+54
+54
+66
+54
+54
+66
+52
+53
+66
+49
+54
+67
+49
+67
+80
+62
+80
+93
+73
+82
+96
+73
+73
+87
+64
+65
+79
+54
+66
+80
+55
+69
+85
+58
+74
+98
+64
+74
+100
+63
+75
+101
+64
+75
+101
+62
+73
+99
+60
+72
+99
+58
+73
+100
+59
+74
+101
+60
+83
+110
+69
+88
+114
+75
+92
+118
+81
+93
+119
+84
+91
+116
+84
+84
+109
+79
+67
+92
+62
+54
+73
+53
+38
+49
+45
+39
+44
+48
+37
+42
+46
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+106
+99
+89
+107
+100
+90
+108
+99
+92
+109
+100
+91
+109
+101
+90
+109
+102
+86
+109
+104
+85
+107
+105
+84
+109
+106
+87
+106
+107
+91
+107
+107
+99
+119
+119
+119
+145
+146
+151
+167
+172
+178
+190
+197
+203
+209
+219
+221
+235
+240
+243
+246
+251
+254
+253
+254
+255
+254
+255
+255
+255
+254
+255
+255
+253
+254
+254
+253
+251
+255
+254
+250
+255
+255
+250
+253
+254
+248
+250
+251
+243
+245
+248
+239
+241
+247
+235
+241
+247
+235
+244
+247
+236
+245
+249
+235
+246
+248
+234
+245
+248
+229
+245
+247
+225
+238
+238
+212
+219
+219
+191
+201
+202
+171
+176
+177
+146
+147
+150
+121
+117
+121
+96
+107
+112
+90
+116
+123
+105
+136
+144
+129
+159
+167
+156
+174
+181
+173
+205
+207
+202
+222
+222
+220
+239
+239
+237
+248
+248
+246
+251
+251
+249
+254
+254
+252
+254
+254
+252
+253
+253
+251
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+253
+255
+254
+245
+250
+253
+251
+255
+255
+254
+254
+254
+255
+248
+246
+255
+250
+244
+255
+245
+235
+248
+204
+193
+215
+157
+143
+147
+75
+60
+164
+81
+65
+168
+75
+58
+167
+64
+49
+183
+71
+59
+207
+89
+77
+206
+84
+73
+189
+63
+51
+196
+68
+55
+198
+72
+58
+195
+75
+61
+185
+73
+59
+170
+66
+55
+157
+63
+51
+149
+65
+55
+144
+70
+59
+134
+66
+57
+129
+66
+57
+126
+66
+56
+123
+65
+54
+122
+64
+53
+122
+62
+52
+122
+62
+52
+122
+62
+52
+120
+60
+52
+120
+60
+52
+119
+59
+51
+119
+59
+51
+117
+58
+50
+116
+57
+49
+116
+57
+49
+116
+57
+49
+114
+57
+48
+114
+57
+48
+114
+57
+48
+114
+57
+48
+111
+57
+47
+110
+56
+46
+108
+54
+44
+107
+53
+43
+108
+55
+47
+106
+56
+49
+108
+55
+49
+106
+56
+49
+107
+54
+48
+105
+55
+48
+105
+55
+48
+104
+54
+47
+103
+53
+46
+103
+53
+46
+102
+53
+46
+103
+54
+47
+104
+55
+48
+105
+56
+49
+107
+58
+51
+107
+58
+51
+108
+59
+52
+106
+59
+51
+105
+58
+48
+104
+60
+49
+107
+63
+50
+106
+67
+52
+105
+68
+50
+102
+69
+50
+102
+73
+55
+108
+86
+65
+106
+89
+71
+117
+106
+86
+134
+127
+109
+145
+142
+123
+128
+127
+109
+69
+70
+54
+53
+56
+45
+50
+56
+46
+50
+56
+46
+50
+56
+46
+49
+55
+45
+49
+55
+45
+49
+55
+45
+48
+54
+44
+49
+55
+45
+49
+55
+45
+49
+55
+45
+48
+54
+44
+48
+54
+44
+47
+53
+43
+47
+53
+43
+47
+53
+43
+47
+52
+46
+47
+52
+46
+47
+52
+46
+47
+52
+46
+47
+52
+46
+47
+52
+46
+47
+52
+46
+47
+52
+46
+47
+52
+46
+47
+52
+46
+46
+51
+45
+45
+50
+44
+45
+50
+44
+46
+51
+45
+47
+52
+46
+46
+53
+46
+43
+53
+45
+43
+54
+46
+45
+57
+47
+47
+59
+49
+50
+62
+50
+52
+64
+52
+54
+66
+52
+55
+68
+51
+56
+69
+51
+63
+76
+58
+69
+82
+62
+67
+81
+58
+59
+73
+50
+56
+70
+45
+62
+76
+51
+68
+84
+57
+74
+95
+64
+74
+98
+64
+76
+100
+66
+75
+99
+63
+73
+97
+61
+71
+96
+57
+70
+95
+56
+71
+96
+57
+82
+107
+68
+88
+112
+76
+93
+117
+83
+94
+118
+86
+90
+113
+84
+80
+103
+75
+61
+84
+56
+46
+65
+46
+38
+49
+45
+39
+44
+48
+37
+42
+46
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+106
+99
+89
+107
+100
+90
+108
+99
+92
+109
+100
+91
+109
+101
+90
+109
+102
+86
+110
+105
+86
+108
+106
+85
+108
+107
+87
+108
+109
+93
+112
+113
+105
+128
+130
+129
+158
+161
+166
+185
+190
+196
+195
+202
+208
+218
+228
+230
+244
+249
+252
+250
+255
+255
+251
+252
+254
+251
+252
+254
+253
+251
+252
+251
+250
+248
+255
+254
+252
+255
+255
+251
+255
+254
+249
+251
+252
+244
+245
+246
+238
+238
+241
+230
+233
+239
+227
+231
+237
+223
+237
+241
+226
+240
+244
+229
+241
+244
+227
+241
+244
+223
+242
+241
+220
+234
+234
+208
+216
+216
+188
+199
+199
+171
+178
+177
+149
+161
+161
+137
+145
+147
+125
+144
+147
+128
+156
+158
+145
+170
+173
+162
+182
+187
+180
+192
+197
+191
+220
+220
+218
+233
+233
+231
+246
+246
+244
+251
+251
+249
+253
+253
+251
+255
+255
+253
+255
+255
+253
+253
+253
+251
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+254
+251
+251
+253
+255
+254
+255
+255
+254
+255
+245
+240
+237
+246
+237
+230
+255
+249
+240
+255
+250
+236
+255
+238
+222
+232
+191
+173
+183
+127
+110
+148
+79
+63
+163
+80
+64
+185
+89
+75
+184
+78
+64
+180
+68
+56
+190
+69
+58
+193
+65
+54
+198
+70
+59
+197
+73
+63
+188
+71
+61
+173
+64
+57
+161
+60
+52
+152
+62
+54
+149
+66
+60
+139
+64
+59
+133
+66
+60
+128
+65
+58
+124
+65
+59
+121
+64
+57
+119
+64
+57
+117
+64
+56
+118
+63
+56
+118
+61
+52
+118
+61
+52
+118
+61
+52
+117
+60
+51
+115
+61
+51
+114
+60
+50
+114
+60
+50
+113
+59
+49
+111
+59
+48
+111
+59
+48
+111
+59
+48
+110
+58
+47
+107
+57
+46
+106
+56
+45
+106
+56
+45
+105
+55
+46
+109
+56
+50
+110
+55
+50
+109
+54
+49
+108
+55
+49
+108
+55
+49
+107
+54
+48
+105
+55
+48
+105
+55
+48
+108
+58
+51
+106
+57
+50
+104
+55
+48
+102
+55
+47
+102
+55
+47
+102
+55
+47
+104
+57
+49
+102
+58
+49
+106
+63
+54
+102
+62
+52
+101
+61
+49
+102
+62
+50
+104
+67
+51
+105
+69
+53
+102
+71
+51
+99
+71
+50
+99
+74
+54
+104
+86
+64
+105
+92
+73
+115
+107
+86
+133
+130
+111
+143
+142
+122
+112
+113
+95
+57
+61
+44
+52
+55
+44
+50
+56
+46
+49
+55
+45
+49
+55
+45
+49
+55
+45
+48
+54
+44
+48
+54
+44
+48
+54
+44
+49
+55
+45
+49
+55
+45
+49
+55
+45
+48
+54
+44
+48
+54
+44
+47
+53
+43
+47
+53
+43
+47
+53
+43
+46
+51
+45
+46
+51
+45
+46
+51
+45
+46
+51
+45
+46
+51
+45
+46
+51
+45
+46
+51
+45
+46
+51
+45
+46
+51
+45
+46
+51
+45
+45
+50
+44
+45
+50
+44
+45
+50
+44
+45
+50
+44
+46
+51
+45
+45
+52
+45
+42
+52
+44
+41
+52
+44
+42
+54
+44
+43
+55
+45
+46
+58
+46
+49
+61
+49
+52
+64
+50
+53
+65
+51
+54
+67
+50
+58
+71
+53
+60
+73
+55
+56
+69
+49
+50
+63
+43
+50
+64
+41
+56
+70
+47
+62
+78
+52
+68
+88
+60
+69
+93
+61
+75
+96
+65
+74
+98
+64
+75
+96
+63
+71
+95
+59
+72
+94
+58
+70
+94
+58
+83
+105
+69
+88
+112
+78
+96
+117
+86
+94
+117
+88
+90
+110
+83
+76
+99
+73
+57
+77
+52
+41
+58
+40
+38
+47
+44
+37
+42
+46
+35
+40
+44
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+106
+99
+89
+107
+100
+90
+108
+99
+92
+109
+100
+91
+109
+101
+90
+109
+102
+86
+108
+103
+84
+107
+105
+84
+110
+109
+89
+111
+112
+96
+116
+117
+109
+133
+135
+134
+164
+167
+172
+191
+196
+202
+205
+212
+218
+229
+239
+241
+251
+255
+255
+251
+255
+255
+250
+251
+253
+252
+253
+255
+255
+253
+254
+253
+252
+250
+255
+255
+253
+255
+255
+251
+254
+253
+248
+247
+248
+240
+239
+240
+232
+231
+234
+223
+224
+230
+218
+222
+229
+213
+231
+235
+218
+234
+239
+219
+237
+240
+219
+236
+240
+217
+238
+238
+214
+232
+232
+208
+218
+216
+191
+204
+202
+177
+194
+189
+167
+183
+181
+160
+177
+174
+157
+182
+180
+167
+193
+190
+181
+201
+200
+195
+210
+211
+206
+217
+217
+215
+232
+232
+230
+242
+242
+240
+250
+250
+248
+252
+252
+250
+253
+253
+251
+255
+255
+253
+255
+255
+253
+252
+252
+250
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+255
+254
+252
+255
+251
+254
+255
+247
+250
+250
+246
+245
+248
+247
+243
+252
+255
+248
+254
+255
+248
+254
+255
+244
+253
+252
+234
+255
+254
+236
+245
+220
+200
+196
+155
+137
+157
+98
+80
+151
+75
+59
+165
+76
+60
+180
+80
+64
+186
+74
+60
+189
+65
+55
+196
+68
+59
+195
+71
+63
+188
+69
+61
+176
+63
+59
+166
+58
+55
+157
+59
+56
+152
+63
+59
+143
+62
+59
+137
+63
+60
+130
+65
+61
+124
+65
+61
+119
+66
+60
+115
+66
+59
+114
+67
+59
+115
+66
+59
+113
+63
+54
+115
+62
+54
+115
+62
+54
+114
+61
+53
+114
+61
+53
+114
+61
+53
+112
+62
+53
+111
+61
+52
+110
+62
+52
+109
+61
+51
+108
+60
+50
+107
+59
+49
+106
+59
+49
+105
+58
+48
+105
+58
+48
+106
+58
+48
+110
+55
+50
+112
+54
+50
+112
+54
+50
+109
+54
+49
+109
+54
+49
+108
+55
+49
+105
+55
+48
+105
+55
+48
+108
+59
+52
+107
+58
+51
+104
+57
+49
+101
+57
+48
+101
+57
+48
+101
+57
+48
+101
+58
+49
+100
+60
+50
+102
+66
+54
+99
+65
+53
+99
+67
+52
+100
+68
+53
+100
+71
+53
+100
+73
+54
+98
+73
+51
+95
+73
+50
+94
+76
+54
+101
+86
+63
+106
+98
+77
+114
+109
+87
+132
+131
+111
+132
+135
+114
+91
+96
+76
+51
+58
+40
+50
+56
+44
+50
+56
+46
+49
+55
+45
+49
+55
+45
+49
+55
+45
+48
+54
+44
+48
+54
+44
+48
+54
+44
+49
+55
+45
+49
+55
+45
+49
+55
+45
+48
+54
+44
+48
+54
+44
+47
+53
+43
+47
+53
+43
+47
+53
+43
+46
+51
+45
+46
+51
+45
+46
+51
+45
+46
+51
+45
+46
+51
+45
+46
+51
+45
+46
+51
+45
+46
+51
+45
+45
+50
+44
+45
+50
+44
+44
+49
+43
+44
+49
+43
+44
+49
+43
+44
+49
+43
+45
+50
+44
+44
+51
+44
+44
+54
+46
+43
+53
+45
+42
+52
+43
+42
+52
+43
+43
+53
+44
+46
+56
+45
+48
+59
+45
+50
+61
+47
+50
+61
+45
+53
+64
+47
+54
+65
+48
+53
+65
+45
+49
+61
+41
+49
+61
+41
+53
+65
+45
+56
+70
+47
+61
+79
+53
+64
+84
+56
+70
+89
+61
+72
+92
+64
+74
+93
+63
+73
+94
+61
+75
+94
+62
+75
+96
+63
+84
+103
+71
+91
+112
+81
+99
+118
+90
+97
+117
+90
+89
+107
+83
+74
+93
+71
+54
+71
+52
+38
+52
+37
+36
+45
+42
+36
+41
+44
+34
+39
+42
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+106
+99
+89
+107
+100
+90
+108
+99
+92
+109
+100
+91
+109
+101
+90
+108
+102
+86
+106
+103
+84
+107
+106
+85
+108
+110
+89
+111
+114
+97
+115
+118
+109
+129
+133
+132
+159
+164
+168
+184
+191
+199
+213
+222
+227
+236
+246
+248
+251
+255
+255
+251
+255
+255
+250
+251
+255
+253
+254
+255
+255
+254
+255
+253
+252
+250
+255
+255
+251
+255
+255
+250
+252
+252
+244
+243
+245
+234
+235
+237
+226
+227
+231
+217
+221
+227
+213
+220
+227
+209
+228
+233
+211
+231
+236
+213
+233
+237
+214
+234
+236
+212
+235
+235
+211
+232
+230
+207
+223
+218
+196
+211
+206
+184
+211
+206
+186
+204
+198
+182
+203
+195
+184
+208
+201
+193
+215
+210
+206
+224
+219
+216
+234
+230
+229
+240
+239
+237
+243
+242
+240
+249
+249
+247
+253
+253
+251
+253
+253
+251
+253
+253
+251
+255
+255
+253
+254
+254
+252
+252
+252
+250
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+255
+253
+252
+255
+252
+253
+255
+246
+247
+253
+249
+248
+254
+255
+253
+249
+255
+253
+246
+255
+250
+237
+255
+243
+240
+254
+239
+235
+242
+226
+255
+255
+237
+255
+236
+217
+204
+166
+147
+163
+106
+87
+161
+90
+70
+170
+87
+69
+173
+76
+59
+182
+70
+58
+188
+70
+60
+189
+70
+62
+185
+70
+63
+178
+66
+62
+169
+61
+58
+161
+59
+57
+153
+59
+57
+149
+61
+60
+142
+62
+61
+133
+63
+61
+125
+64
+59
+120
+65
+60
+115
+66
+59
+112
+68
+59
+112
+68
+59
+112
+63
+56
+113
+63
+54
+113
+63
+54
+113
+63
+54
+113
+63
+54
+112
+62
+53
+111
+63
+53
+111
+63
+53
+111
+64
+54
+110
+63
+53
+109
+62
+52
+107
+60
+50
+104
+60
+49
+104
+60
+49
+104
+60
+49
+108
+60
+50
+111
+56
+51
+113
+54
+50
+112
+54
+50
+112
+54
+50
+109
+54
+49
+108
+55
+49
+106
+56
+49
+105
+56
+49
+104
+55
+48
+103
+56
+48
+101
+57
+48
+101
+58
+49
+100
+60
+50
+101
+63
+52
+102
+64
+53
+100
+66
+54
+94
+66
+52
+97
+71
+56
+99
+76
+58
+100
+77
+59
+99
+77
+56
+96
+75
+54
+93
+75
+51
+93
+77
+52
+93
+81
+57
+98
+88
+63
+109
+104
+82
+115
+115
+91
+128
+131
+110
+118
+123
+101
+70
+79
+58
+52
+61
+42
+51
+57
+45
+50
+56
+46
+50
+56
+46
+50
+56
+46
+49
+55
+45
+49
+55
+45
+49
+55
+45
+48
+54
+44
+49
+55
+45
+49
+55
+45
+49
+55
+45
+48
+54
+44
+48
+54
+44
+47
+53
+43
+47
+53
+43
+47
+53
+43
+45
+50
+44
+45
+50
+44
+45
+50
+44
+45
+50
+44
+45
+50
+44
+45
+50
+44
+45
+50
+44
+45
+50
+44
+45
+50
+44
+44
+49
+43
+43
+48
+42
+43
+48
+42
+43
+48
+42
+43
+48
+42
+44
+49
+43
+44
+51
+44
+46
+53
+46
+44
+54
+46
+42
+52
+43
+42
+52
+43
+42
+52
+43
+43
+53
+44
+45
+55
+44
+46
+57
+43
+45
+56
+42
+48
+59
+43
+52
+63
+47
+53
+64
+47
+52
+63
+46
+51
+63
+43
+51
+62
+45
+51
+64
+44
+55
+70
+47
+57
+75
+51
+64
+79
+56
+66
+84
+58
+71
+87
+60
+72
+91
+63
+77
+93
+66
+77
+96
+68
+85
+101
+74
+92
+111
+83
+100
+116
+90
+96
+114
+90
+88
+103
+82
+71
+88
+69
+52
+66
+49
+36
+50
+37
+36
+45
+42
+36
+41
+44
+34
+39
+42
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+106
+100
+86
+106
+100
+86
+106
+99
+89
+107
+100
+90
+108
+99
+92
+109
+100
+91
+108
+102
+90
+108
+102
+86
+108
+105
+86
+108
+107
+86
+107
+109
+88
+107
+110
+93
+108
+114
+104
+121
+127
+125
+149
+157
+160
+174
+183
+190
+209
+218
+223
+233
+242
+247
+251
+255
+255
+248
+253
+255
+248
+249
+253
+254
+255
+255
+255
+254
+255
+249
+248
+246
+255
+255
+251
+254
+253
+248
+249
+249
+241
+241
+243
+232
+233
+235
+222
+227
+231
+216
+223
+230
+214
+224
+232
+211
+228
+233
+210
+231
+237
+211
+232
+236
+211
+231
+233
+209
+232
+232
+208
+231
+229
+206
+224
+219
+199
+215
+208
+190
+218
+211
+195
+217
+209
+198
+222
+212
+203
+230
+221
+216
+238
+228
+227
+243
+233
+234
+250
+241
+244
+255
+249
+251
+250
+249
+247
+254
+254
+252
+255
+255
+253
+253
+253
+251
+253
+253
+251
+255
+255
+253
+255
+255
+253
+252
+252
+250
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+255
+253
+252
+255
+250
+249
+255
+251
+250
+255
+254
+253
+252
+255
+253
+245
+255
+252
+234
+251
+245
+234
+255
+248
+242
+255
+253
+245
+255
+250
+239
+245
+231
+255
+250
+234
+255
+250
+232
+242
+204
+185
+171
+119
+98
+143
+81
+58
+170
+93
+73
+175
+80
+62
+179
+76
+61
+179
+75
+62
+179
+75
+64
+177
+73
+64
+172
+69
+62
+162
+63
+58
+154
+59
+55
+150
+61
+57
+143
+62
+58
+136
+63
+57
+129
+64
+58
+122
+65
+58
+117
+67
+58
+113
+69
+58
+113
+69
+60
+112
+63
+56
+113
+63
+56
+113
+63
+56
+113
+63
+56
+113
+63
+56
+113
+63
+56
+112
+63
+56
+112
+63
+56
+113
+66
+58
+112
+65
+57
+110
+63
+55
+108
+61
+53
+105
+61
+52
+106
+62
+53
+106
+62
+53
+110
+61
+54
+111
+56
+51
+114
+55
+51
+112
+54
+50
+112
+54
+50
+110
+55
+50
+108
+55
+49
+106
+56
+49
+105
+56
+49
+100
+56
+47
+100
+57
+48
+99
+59
+49
+100
+62
+51
+100
+64
+52
+99
+65
+53
+99
+65
+53
+95
+67
+53
+90
+69
+52
+95
+78
+60
+103
+86
+66
+104
+87
+67
+99
+83
+60
+94
+79
+56
+91
+79
+53
+92
+82
+55
+93
+86
+60
+93
+89
+62
+110
+108
+85
+116
+118
+94
+124
+129
+107
+99
+109
+85
+50
+62
+40
+54
+66
+46
+51
+59
+46
+51
+57
+47
+51
+57
+47
+51
+57
+47
+50
+56
+46
+50
+56
+46
+50
+56
+46
+49
+55
+45
+49
+55
+45
+49
+55
+45
+49
+55
+45
+48
+54
+44
+48
+54
+44
+47
+53
+43
+47
+53
+43
+47
+53
+43
+45
+50
+44
+45
+50
+44
+45
+50
+44
+45
+50
+44
+45
+50
+44
+45
+50
+44
+45
+50
+44
+45
+50
+44
+44
+49
+43
+44
+49
+43
+43
+48
+42
+42
+47
+41
+42
+47
+41
+43
+48
+42
+44
+49
+43
+43
+50
+43
+45
+52
+45
+43
+53
+45
+42
+52
+44
+42
+52
+44
+43
+53
+44
+43
+53
+44
+44
+54
+43
+45
+55
+44
+44
+54
+43
+47
+58
+44
+50
+61
+47
+54
+65
+49
+55
+66
+50
+55
+66
+49
+53
+64
+48
+52
+63
+46
+50
+63
+45
+52
+67
+46
+58
+71
+51
+61
+76
+53
+65
+79
+56
+68
+84
+58
+74
+88
+63
+76
+92
+66
+84
+98
+73
+92
+107
+84
+99
+113
+90
+94
+109
+88
+85
+98
+80
+68
+82
+65
+50
+62
+48
+35
+47
+37
+38
+47
+44
+38
+44
+44
+36
+42
+42
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+106
+100
+86
+106
+100
+86
+106
+99
+89
+107
+100
+90
+108
+99
+92
+109
+100
+91
+108
+102
+90
+108
+102
+86
+111
+108
+89
+109
+108
+87
+106
+108
+87
+103
+107
+90
+102
+108
+98
+114
+123
+120
+142
+152
+154
+168
+177
+184
+201
+210
+215
+226
+235
+240
+247
+252
+255
+246
+251
+254
+249
+250
+254
+254
+255
+255
+255
+254
+255
+249
+248
+244
+255
+255
+250
+253
+253
+245
+248
+248
+238
+240
+242
+229
+233
+235
+221
+229
+233
+216
+227
+234
+216
+229
+237
+214
+230
+236
+210
+233
+237
+210
+234
+237
+210
+232
+232
+206
+232
+230
+207
+232
+227
+207
+225
+218
+200
+216
+208
+195
+216
+206
+196
+221
+210
+204
+234
+223
+219
+248
+237
+235
+255
+244
+246
+255
+245
+249
+255
+245
+251
+255
+249
+252
+254
+252
+253
+255
+255
+253
+255
+255
+253
+254
+254
+252
+254
+254
+252
+255
+255
+253
+255
+255
+253
+253
+253
+251
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+255
+254
+250
+255
+249
+247
+255
+249
+247
+251
+250
+248
+247
+251
+250
+245
+255
+254
+243
+255
+255
+240
+255
+255
+237
+253
+250
+240
+252
+248
+251
+255
+250
+255
+253
+241
+255
+242
+226
+255
+239
+219
+255
+225
+203
+216
+174
+150
+170
+114
+91
+164
+89
+68
+169
+84
+64
+168
+81
+62
+169
+82
+65
+173
+81
+66
+169
+77
+64
+161
+68
+60
+151
+61
+53
+149
+62
+55
+143
+63
+54
+137
+62
+56
+131
+64
+55
+125
+65
+55
+119
+67
+54
+116
+68
+56
+115
+69
+56
+113
+63
+56
+113
+63
+56
+115
+62
+56
+113
+63
+56
+113
+63
+56
+113
+63
+56
+113
+63
+56
+112
+63
+56
+115
+66
+59
+113
+66
+58
+111
+64
+56
+109
+62
+54
+108
+61
+53
+106
+62
+53
+109
+62
+54
+111
+62
+55
+111
+56
+51
+113
+55
+51
+111
+56
+51
+109
+56
+50
+109
+56
+50
+105
+56
+49
+104
+57
+49
+102
+58
+49
+102
+59
+50
+100
+62
+51
+100
+64
+52
+98
+66
+53
+96
+67
+53
+93
+65
+51
+92
+64
+50
+87
+66
+49
+84
+71
+52
+91
+83
+62
+102
+94
+71
+105
+94
+72
+98
+88
+63
+90
+83
+57
+90
+83
+55
+92
+87
+58
+90
+86
+59
+88
+87
+59
+107
+109
+85
+115
+119
+94
+117
+125
+102
+85
+97
+73
+38
+50
+28
+56
+68
+48
+51
+59
+46
+52
+58
+48
+52
+58
+48
+51
+57
+47
+51
+57
+47
+51
+57
+47
+50
+56
+46
+50
+56
+46
+49
+55
+45
+49
+55
+45
+49
+55
+45
+48
+54
+44
+48
+54
+44
+47
+53
+43
+47
+53
+43
+47
+53
+43
+45
+50
+44
+45
+50
+44
+45
+50
+44
+45
+50
+44
+45
+50
+44
+45
+50
+44
+45
+50
+44
+45
+50
+44
+44
+49
+43
+43
+48
+42
+43
+48
+42
+42
+47
+41
+42
+47
+41
+43
+48
+42
+43
+48
+42
+44
+49
+43
+43
+50
+43
+41
+51
+43
+42
+52
+44
+43
+53
+45
+43
+53
+44
+44
+54
+45
+45
+55
+46
+45
+55
+44
+44
+54
+43
+46
+56
+45
+50
+60
+49
+54
+65
+51
+57
+68
+54
+57
+68
+52
+55
+66
+52
+54
+65
+49
+48
+59
+43
+50
+63
+45
+53
+66
+48
+57
+70
+50
+60
+73
+53
+64
+78
+55
+70
+84
+61
+74
+88
+63
+82
+96
+73
+91
+104
+84
+97
+110
+90
+92
+105
+87
+81
+94
+77
+66
+78
+64
+47
+59
+47
+34
+44
+35
+42
+48
+44
+40
+46
+44
+38
+44
+44
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+105
+102
+87
+105
+102
+87
+105
+102
+87
+105
+102
+87
+105
+102
+87
+105
+102
+87
+105
+102
+87
+105
+102
+87
+107
+101
+87
+107
+101
+87
+107
+100
+90
+108
+101
+91
+109
+100
+93
+110
+101
+92
+109
+103
+91
+109
+103
+87
+113
+110
+91
+107
+109
+87
+107
+110
+89
+107
+114
+96
+106
+114
+103
+112
+121
+118
+135
+145
+147
+159
+170
+176
+187
+196
+201
+208
+217
+222
+234
+239
+243
+246
+251
+254
+252
+253
+255
+254
+255
+255
+255
+254
+255
+254
+253
+249
+255
+255
+250
+254
+254
+246
+250
+250
+240
+246
+248
+235
+244
+246
+232
+240
+244
+227
+234
+241
+223
+231
+239
+216
+240
+246
+218
+237
+242
+212
+235
+238
+209
+236
+236
+210
+232
+230
+209
+225
+220
+201
+221
+213
+200
+222
+212
+202
+224
+211
+205
+231
+217
+216
+241
+227
+227
+249
+234
+237
+253
+241
+243
+255
+246
+250
+255
+248
+255
+255
+252
+255
+255
+253
+254
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+255
+250
+255
+254
+250
+255
+255
+251
+255
+255
+253
+254
+255
+255
+252
+255
+255
+250
+255
+255
+249
+254
+255
+249
+253
+255
+254
+255
+255
+254
+253
+251
+254
+249
+243
+255
+248
+238
+255
+249
+233
+255
+248
+226
+255
+241
+217
+255
+232
+207
+182
+132
+105
+162
+100
+75
+147
+83
+58
+155
+87
+64
+165
+93
+71
+160
+83
+65
+154
+75
+58
+155
+76
+61
+142
+63
+50
+141
+63
+50
+135
+63
+51
+128
+60
+47
+121
+59
+46
+116
+60
+45
+115
+63
+49
+115
+66
+52
+114
+61
+53
+114
+61
+55
+116
+61
+56
+115
+62
+56
+117
+64
+58
+117
+64
+58
+116
+63
+57
+113
+63
+56
+115
+65
+58
+113
+64
+57
+113
+64
+57
+113
+64
+57
+112
+63
+56
+110
+63
+55
+111
+62
+55
+111
+62
+55
+107
+57
+50
+109
+56
+50
+108
+58
+51
+108
+59
+52
+108
+59
+52
+104
+60
+51
+103
+60
+51
+99
+61
+50
+99
+63
+51
+94
+62
+49
+100
+71
+57
+99
+71
+57
+84
+61
+45
+78
+57
+40
+77
+56
+39
+64
+49
+30
+87
+81
+59
+80
+78
+55
+75
+73
+48
+79
+75
+50
+93
+89
+62
+105
+101
+74
+101
+97
+68
+86
+85
+55
+88
+88
+60
+93
+96
+67
+111
+115
+90
+122
+128
+102
+100
+108
+85
+61
+73
+49
+45
+57
+35
+50
+62
+42
+52
+60
+47
+53
+59
+49
+52
+58
+48
+52
+58
+48
+52
+58
+48
+51
+57
+47
+51
+57
+47
+51
+57
+47
+51
+57
+47
+51
+57
+47
+51
+57
+47
+50
+56
+46
+49
+55
+45
+49
+55
+45
+49
+55
+45
+48
+54
+44
+49
+54
+48
+49
+54
+48
+48
+53
+47
+48
+53
+47
+47
+52
+46
+47
+52
+46
+47
+52
+46
+47
+52
+46
+44
+49
+43
+44
+49
+43
+44
+49
+43
+44
+49
+43
+44
+49
+43
+44
+49
+43
+43
+48
+42
+43
+48
+42
+46
+53
+46
+45
+52
+45
+45
+52
+45
+44
+51
+44
+45
+52
+45
+45
+52
+44
+46
+53
+45
+46
+53
+45
+43
+50
+42
+45
+52
+44
+48
+55
+47
+53
+61
+50
+57
+65
+54
+61
+69
+56
+63
+71
+60
+63
+74
+60
+55
+66
+50
+53
+64
+47
+51
+62
+45
+49
+61
+41
+50
+62
+42
+57
+69
+47
+66
+78
+56
+73
+85
+63
+79
+91
+71
+86
+98
+78
+93
+104
+87
+89
+100
+84
+76
+87
+73
+60
+70
+59
+47
+57
+46
+41
+51
+42
+42
+48
+44
+41
+47
+43
+40
+46
+44
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+105
+102
+87
+105
+102
+87
+105
+102
+87
+105
+102
+87
+105
+102
+87
+105
+102
+87
+105
+102
+87
+105
+102
+87
+107
+101
+87
+107
+101
+87
+107
+100
+90
+108
+101
+91
+109
+100
+93
+110
+101
+92
+109
+103
+91
+107
+104
+87
+111
+110
+90
+106
+108
+86
+107
+110
+89
+107
+114
+96
+106
+116
+105
+113
+124
+120
+137
+148
+150
+163
+174
+180
+190
+199
+204
+210
+219
+224
+235
+240
+244
+247
+252
+255
+253
+254
+255
+254
+255
+255
+255
+254
+252
+254
+253
+249
+255
+255
+250
+254
+254
+244
+251
+251
+239
+247
+249
+235
+244
+247
+230
+240
+245
+225
+234
+242
+221
+232
+237
+214
+234
+239
+209
+230
+235
+203
+228
+231
+202
+230
+230
+204
+227
+225
+204
+223
+217
+201
+222
+212
+202
+223
+212
+206
+230
+216
+215
+236
+222
+222
+245
+230
+233
+250
+238
+242
+255
+243
+247
+255
+246
+250
+255
+249
+253
+255
+251
+254
+255
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+253
+255
+252
+250
+255
+249
+250
+255
+249
+253
+255
+252
+253
+254
+255
+253
+252
+255
+253
+250
+255
+255
+250
+255
+255
+248
+255
+255
+252
+255
+255
+250
+253
+255
+248
+246
+255
+249
+242
+255
+252
+239
+255
+252
+234
+254
+248
+226
+255
+241
+215
+255
+234
+206
+217
+178
+149
+163
+117
+91
+142
+92
+67
+146
+92
+66
+152
+92
+68
+152
+87
+67
+150
+83
+64
+138
+70
+51
+137
+68
+52
+135
+68
+51
+131
+68
+51
+126
+67
+51
+122
+66
+49
+118
+65
+49
+115
+63
+49
+117
+64
+56
+115
+62
+56
+117
+62
+57
+117
+64
+58
+116
+63
+57
+111
+61
+54
+112
+62
+55
+115
+65
+58
+113
+63
+56
+112
+63
+56
+112
+63
+56
+110
+63
+55
+111
+62
+55
+109
+62
+54
+110
+61
+54
+109
+62
+54
+107
+60
+52
+108
+61
+53
+109
+62
+54
+107
+63
+54
+106
+63
+54
+103
+65
+54
+101
+65
+53
+98
+66
+53
+100
+71
+57
+91
+65
+50
+94
+71
+55
+94
+73
+56
+78
+61
+43
+70
+55
+36
+71
+56
+37
+62
+54
+33
+76
+76
+52
+71
+75
+50
+68
+71
+44
+68
+68
+42
+77
+77
+49
+92
+91
+63
+98
+97
+67
+96
+97
+66
+89
+89
+61
+100
+103
+74
+115
+119
+94
+115
+121
+95
+88
+96
+73
+58
+68
+44
+47
+59
+37
+55
+67
+47
+54
+62
+49
+54
+60
+50
+54
+60
+50
+54
+60
+50
+53
+59
+49
+53
+59
+49
+53
+59
+49
+53
+59
+49
+53
+59
+49
+53
+59
+49
+53
+59
+49
+52
+58
+48
+52
+58
+48
+51
+57
+47
+51
+57
+47
+51
+57
+47
+50
+55
+49
+50
+55
+49
+50
+55
+49
+49
+54
+48
+49
+54
+48
+49
+54
+48
+48
+53
+47
+48
+53
+47
+46
+51
+45
+46
+51
+45
+45
+50
+44
+45
+50
+44
+44
+49
+43
+44
+49
+43
+43
+48
+42
+43
+48
+42
+42
+49
+42
+42
+49
+42
+41
+48
+41
+41
+48
+41
+41
+48
+41
+42
+49
+42
+43
+50
+42
+44
+51
+43
+46
+53
+45
+45
+52
+44
+46
+53
+45
+48
+55
+47
+52
+59
+51
+57
+65
+54
+63
+70
+62
+66
+74
+63
+59
+70
+56
+58
+69
+53
+55
+66
+49
+52
+63
+46
+51
+63
+43
+54
+66
+46
+60
+72
+50
+64
+76
+54
+76
+88
+68
+83
+95
+75
+89
+100
+84
+87
+98
+82
+76
+86
+75
+61
+71
+60
+49
+59
+50
+43
+53
+44
+44
+51
+44
+43
+49
+45
+42
+48
+44
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+105
+102
+87
+105
+102
+87
+105
+102
+87
+105
+102
+87
+105
+102
+87
+105
+102
+87
+105
+102
+87
+105
+102
+87
+107
+101
+87
+107
+101
+87
+108
+99
+90
+109
+100
+91
+109
+100
+93
+110
+101
+92
+109
+103
+91
+107
+104
+87
+109
+108
+88
+105
+109
+86
+106
+111
+89
+107
+116
+97
+105
+117
+105
+113
+125
+121
+138
+152
+153
+165
+178
+184
+191
+202
+208
+212
+221
+226
+237
+242
+246
+247
+252
+255
+252
+253
+255
+253
+255
+254
+255
+254
+252
+254
+253
+248
+255
+255
+247
+253
+253
+243
+250
+251
+237
+247
+250
+233
+244
+247
+228
+239
+244
+222
+231
+239
+216
+229
+235
+209
+226
+231
+201
+222
+225
+194
+221
+221
+193
+222
+222
+198
+222
+219
+200
+221
+215
+203
+224
+213
+207
+228
+217
+215
+237
+225
+225
+242
+230
+234
+249
+237
+241
+254
+243
+247
+255
+246
+250
+255
+248
+251
+255
+249
+252
+255
+252
+252
+255
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+253
+255
+252
+246
+255
+250
+246
+255
+250
+250
+254
+253
+253
+253
+253
+255
+250
+254
+255
+248
+255
+255
+246
+255
+255
+244
+254
+255
+249
+255
+255
+247
+252
+255
+247
+247
+255
+250
+245
+255
+255
+246
+255
+255
+242
+250
+253
+236
+250
+248
+227
+254
+240
+214
+255
+246
+219
+255
+235
+208
+223
+191
+166
+168
+131
+105
+132
+90
+66
+131
+83
+60
+145
+93
+71
+148
+93
+72
+139
+82
+62
+127
+70
+50
+118
+63
+42
+117
+62
+42
+118
+66
+45
+121
+70
+51
+120
+71
+54
+113
+63
+52
+110
+60
+51
+113
+60
+52
+116
+66
+57
+115
+65
+56
+111
+63
+53
+113
+65
+55
+120
+72
+62
+110
+62
+52
+109
+62
+52
+109
+62
+52
+107
+63
+52
+108
+61
+51
+106
+62
+51
+108
+61
+51
+106
+62
+51
+103
+63
+53
+103
+65
+54
+103
+65
+54
+103
+67
+55
+101
+67
+55
+99
+67
+54
+96
+67
+53
+94
+68
+53
+98
+75
+59
+85
+66
+49
+90
+73
+55
+96
+83
+64
+82
+71
+51
+67
+59
+38
+69
+61
+40
+70
+65
+43
+65
+69
+44
+66
+72
+46
+65
+69
+42
+60
+64
+37
+63
+66
+37
+78
+78
+50
+95
+96
+65
+105
+106
+75
+97
+97
+69
+110
+113
+84
+118
+122
+97
+103
+109
+83
+74
+79
+57
+52
+60
+37
+52
+61
+40
+61
+70
+51
+56
+62
+50
+56
+62
+52
+56
+62
+52
+56
+62
+52
+55
+61
+51
+55
+61
+51
+55
+61
+51
+54
+60
+50
+56
+62
+52
+56
+62
+52
+55
+61
+51
+55
+61
+51
+55
+61
+51
+54
+60
+50
+54
+60
+50
+54
+60
+50
+53
+58
+52
+52
+57
+51
+52
+57
+51
+52
+57
+51
+51
+56
+50
+51
+56
+50
+51
+56
+50
+50
+55
+49
+48
+53
+47
+48
+53
+47
+47
+52
+46
+46
+51
+45
+45
+50
+44
+44
+49
+43
+43
+48
+42
+43
+48
+42
+41
+46
+40
+41
+46
+40
+41
+46
+40
+41
+46
+40
+41
+46
+40
+42
+47
+41
+43
+48
+42
+44
+49
+43
+49
+54
+48
+47
+52
+46
+44
+49
+43
+44
+49
+43
+47
+52
+46
+54
+59
+52
+61
+66
+60
+65
+72
+64
+64
+75
+61
+62
+75
+58
+60
+73
+55
+56
+69
+51
+52
+65
+45
+50
+63
+43
+51
+65
+42
+53
+67
+44
+68
+81
+61
+75
+88
+68
+81
+94
+77
+81
+94
+77
+72
+84
+72
+60
+72
+60
+50
+62
+52
+46
+56
+47
+46
+53
+46
+46
+53
+46
+45
+52
+45
+103
+100
+85
+103
+100
+85
+104
+101
+86
+104
+101
+86
+104
+101
+86
+104
+101
+86
+105
+102
+87
+105
+102
+87
+105
+102
+87
+105
+102
+87
+105
+102
+87
+105
+102
+87
+105
+102
+87
+105
+102
+87
+105
+102
+87
+105
+102
+87
+107
+101
+87
+107
+101
+87
+108
+99
+90
+109
+100
+91
+109
+100
+93
+109
+102
+92
+109
+103
+91
+106
+105
+87
+107
+109
+88
+105
+109
+86
+106
+111
+89
+106
+115
+96
+104
+116
+104
+109
+124
+119
+136
+152
+152
+166
+179
+185
+191
+202
+208
+211
+220
+227
+235
+240
+246
+246
+251
+255
+252
+253
+255
+253
+255
+254
+255
+255
+253
+255
+254
+249
+254
+254
+246
+253
+253
+241
+250
+251
+237
+247
+250
+231
+244
+247
+226
+238
+243
+220
+229
+237
+213
+226
+232
+206
+219
+224
+192
+215
+218
+187
+214
+214
+188
+217
+215
+194
+221
+215
+199
+222
+215
+205
+229
+219
+217
+236
+224
+224
+247
+235
+239
+250
+239
+245
+255
+244
+250
+255
+248
+253
+255
+249
+252
+255
+250
+250
+255
+250
+250
+255
+252
+251
+255
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+253
+255
+252
+247
+255
+253
+247
+255
+253
+250
+254
+253
+253
+253
+253
+255
+251
+253
+255
+248
+254
+255
+246
+253
+255
+244
+250
+255
+248
+251
+255
+247
+250
+255
+248
+248
+255
+252
+249
+255
+255
+248
+255
+255
+248
+250
+255
+244
+250
+252
+238
+255
+255
+237
+255
+248
+228
+253
+238
+219
+255
+239
+219
+255
+239
+217
+238
+210
+188
+176
+144
+121
+118
+82
+60
+117
+76
+54
+117
+75
+53
+119
+74
+53
+123
+78
+57
+125
+80
+59
+120
+75
+54
+107
+64
+45
+98
+55
+38
+123
+77
+64
+115
+68
+58
+113
+66
+56
+115
+68
+58
+111
+67
+56
+103
+59
+48
+100
+56
+45
+103
+61
+49
+105
+63
+51
+105
+63
+51
+105
+63
+51
+103
+63
+51
+102
+62
+50
+102
+62
+50
+102
+62
+50
+101
+63
+50
+98
+64
+52
+98
+66
+53
+96
+67
+53
+95
+67
+53
+95
+67
+53
+91
+68
+52
+90
+69
+52
+87
+68
+51
+88
+73
+54
+79
+66
+47
+92
+84
+63
+111
+105
+83
+99
+94
+72
+77
+75
+52
+73
+71
+48
+73
+75
+51
+62
+68
+42
+63
+72
+45
+64
+70
+42
+60
+66
+38
+60
+65
+35
+70
+73
+44
+88
+89
+58
+100
+101
+70
+109
+109
+81
+120
+120
+92
+116
+118
+94
+91
+95
+70
+64
+67
+46
+54
+59
+37
+56
+64
+43
+60
+67
+49
+57
+63
+51
+57
+63
+53
+57
+63
+53
+56
+62
+52
+56
+62
+52
+55
+61
+51
+55
+61
+51
+55
+61
+51
+57
+63
+53
+56
+62
+52
+56
+62
+52
+56
+62
+52
+56
+62
+52
+56
+62
+52
+56
+62
+52
+56
+62
+52
+55
+60
+54
+55
+60
+54
+55
+60
+54
+54
+59
+53
+54
+59
+53
+54
+59
+53
+53
+58
+52
+53
+58
+52
+51
+56
+50
+51
+56
+50
+49
+54
+48
+48
+53
+47
+47
+52
+46
+45
+50
+44
+44
+49
+43
+44
+49
+43
+43
+48
+42
+43
+48
+42
+42
+47
+41
+42
+47
+41
+43
+48
+42
+44
+49
+43
+45
+50
+44
+45
+50
+44
+48
+53
+47
+46
+51
+45
+43
+48
+42
+43
+48
+42
+45
+50
+46
+50
+55
+49
+56
+61
+57
+59
+66
+58
+64
+75
+61
+64
+77
+59
+64
+77
+59
+61
+74
+54
+56
+69
+49
+51
+64
+44
+49
+63
+40
+48
+62
+39
+60
+73
+53
+66
+79
+59
+72
+85
+67
+73
+86
+69
+68
+80
+66
+59
+71
+59
+50
+62
+52
+46
+58
+48
+45
+55
+47
+47
+54
+47
+46
+53
+46
+103
+100
+85
+103
+100
+85
+103
+100
+85
+104
+101
+86
+104
+101
+86
+105
+102
+87
+105
+102
+87
+105
+102
+87
+105
+102
+87
+105
+102
+87
+105
+102
+87
+105
+102
+87
+105
+102
+87
+105
+102
+87
+105
+102
+87
+105
+102
+87
+107
+101
+87
+108
+100
+87
+108
+99
+90
+109
+100
+91
+109
+100
+93
+109
+102
+92
+109
+103
+91
+106
+105
+87
+107
+109
+88
+105
+110
+87
+105
+113
+90
+103
+115
+95
+100
+114
+101
+106
+121
+116
+133
+149
+149
+163
+178
+183
+189
+200
+206
+210
+219
+226
+234
+239
+245
+244
+249
+253
+251
+252
+255
+253
+255
+254
+255
+255
+253
+255
+255
+250
+255
+255
+248
+255
+255
+243
+254
+255
+241
+251
+254
+235
+247
+250
+229
+240
+245
+222
+230
+238
+214
+226
+232
+204
+217
+220
+191
+213
+213
+185
+210
+208
+185
+212
+209
+190
+218
+212
+200
+224
+217
+209
+234
+224
+223
+244
+233
+237
+253
+242
+248
+255
+246
+251
+255
+250
+255
+255
+252
+255
+255
+253
+254
+254
+253
+251
+254
+253
+249
+254
+253
+249
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+253
+255
+254
+250
+255
+255
+250
+255
+255
+252
+255
+255
+255
+255
+255
+255
+253
+254
+255
+251
+251
+255
+249
+250
+255
+249
+248
+255
+248
+246
+255
+249
+247
+255
+250
+247
+255
+254
+249
+255
+255
+251
+255
+255
+251
+253
+255
+250
+252
+253
+248
+244
+241
+234
+255
+251
+243
+255
+253
+244
+255
+251
+241
+255
+248
+235
+255
+244
+228
+246
+227
+210
+228
+207
+188
+208
+183
+163
+183
+156
+135
+146
+118
+97
+118
+87
+67
+104
+73
+53
+104
+73
+53
+109
+76
+57
+112
+79
+60
+108
+71
+55
+105
+66
+51
+103
+66
+50
+106
+69
+53
+110
+73
+57
+110
+74
+58
+111
+75
+59
+111
+75
+59
+101
+65
+49
+99
+66
+49
+99
+66
+49
+99
+66
+49
+99
+66
+49
+99
+66
+49
+98
+67
+49
+96
+67
+51
+93
+70
+54
+92
+71
+54
+92
+71
+54
+90
+71
+54
+90
+71
+54
+87
+72
+53
+84
+71
+52
+82
+71
+51
+80
+72
+51
+78
+72
+50
+102
+100
+77
+126
+126
+102
+114
+114
+90
+86
+88
+64
+74
+76
+52
+71
+77
+51
+60
+69
+42
+60
+70
+43
+63
+72
+43
+65
+71
+43
+65
+70
+40
+68
+71
+42
+77
+78
+47
+84
+85
+54
+120
+119
+91
+123
+122
+94
+110
+110
+86
+85
+85
+61
+67
+66
+46
+63
+65
+44
+62
+65
+46
+58
+62
+45
+59
+62
+51
+57
+63
+53
+57
+63
+53
+56
+62
+52
+56
+62
+52
+55
+61
+51
+55
+61
+51
+55
+61
+51
+56
+62
+52
+56
+62
+52
+56
+62
+52
+56
+62
+52
+56
+62
+52
+56
+62
+52
+56
+62
+52
+56
+62
+52
+57
+62
+56
+57
+62
+56
+57
+62
+56
+56
+61
+55
+56
+61
+55
+56
+61
+55
+55
+60
+54
+55
+60
+54
+54
+59
+53
+53
+58
+52
+52
+57
+51
+51
+56
+50
+50
+55
+49
+48
+53
+47
+47
+52
+46
+47
+52
+46
+45
+50
+46
+45
+50
+46
+44
+49
+45
+43
+48
+44
+43
+48
+44
+44
+49
+45
+45
+50
+46
+45
+50
+46
+44
+49
+45
+44
+49
+45
+44
+49
+45
+44
+49
+45
+46
+50
+49
+48
+53
+49
+51
+55
+54
+52
+59
+52
+59
+71
+57
+61
+76
+57
+64
+79
+60
+64
+79
+58
+60
+75
+54
+55
+70
+47
+52
+67
+44
+50
+65
+42
+54
+69
+46
+58
+73
+52
+64
+79
+60
+66
+80
+63
+63
+77
+62
+56
+70
+55
+49
+63
+50
+45
+57
+45
+45
+55
+46
+46
+53
+45
+45
+52
+44
+102
+99
+84
+102
+99
+84
+103
+100
+85
+104
+101
+86
+104
+101
+86
+105
+102
+87
+106
+103
+88
+106
+103
+88
+105
+102
+87
+105
+102
+87
+105
+102
+87
+105
+102
+87
+105
+102
+87
+105
+102
+87
+105
+102
+87
+105
+102
+87
+108
+100
+87
+108
+100
+87
+108
+99
+90
+109
+100
+91
+109
+100
+93
+109
+102
+92
+109
+103
+91
+106
+105
+87
+107
+109
+88
+105
+110
+87
+105
+113
+90
+103
+115
+95
+98
+112
+99
+103
+120
+114
+130
+148
+148
+163
+178
+183
+192
+203
+209
+212
+221
+228
+235
+240
+246
+245
+250
+254
+251
+252
+255
+253
+255
+254
+255
+255
+253
+255
+255
+250
+255
+255
+248
+255
+255
+244
+255
+255
+243
+255
+255
+239
+250
+253
+232
+242
+247
+224
+231
+240
+213
+226
+232
+204
+215
+218
+189
+209
+209
+181
+205
+203
+180
+206
+203
+186
+214
+207
+197
+222
+215
+209
+236
+226
+227
+247
+238
+243
+255
+245
+253
+255
+249
+255
+255
+252
+255
+255
+254
+255
+255
+254
+252
+253
+254
+249
+253
+254
+248
+253
+255
+249
+254
+255
+250
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+254
+253
+254
+255
+254
+255
+255
+254
+255
+255
+254
+255
+255
+254
+255
+253
+254
+255
+250
+253
+254
+248
+253
+253
+245
+251
+251
+241
+252
+252
+244
+254
+253
+248
+255
+254
+250
+255
+255
+253
+254
+254
+254
+254
+252
+255
+254
+252
+255
+251
+246
+252
+255
+250
+254
+254
+248
+250
+249
+244
+241
+253
+246
+240
+255
+254
+244
+255
+254
+241
+255
+254
+237
+255
+248
+230
+252
+239
+220
+242
+227
+208
+226
+209
+189
+205
+187
+167
+179
+161
+141
+155
+134
+115
+140
+117
+99
+122
+93
+75
+125
+94
+76
+116
+85
+67
+97
+68
+50
+87
+58
+40
+89
+60
+42
+91
+62
+44
+88
+61
+42
+96
+69
+50
+96
+69
+50
+96
+69
+50
+95
+70
+50
+96
+71
+51
+96
+71
+51
+96
+71
+51
+93
+72
+51
+92
+75
+55
+92
+77
+58
+92
+77
+58
+89
+76
+57
+88
+77
+57
+85
+77
+56
+82
+76
+54
+81
+76
+54
+78
+76
+53
+81
+81
+57
+105
+107
+83
+124
+128
+103
+109
+113
+88
+83
+89
+63
+70
+76
+50
+62
+71
+44
+60
+70
+43
+60
+70
+43
+63
+72
+43
+68
+74
+46
+69
+74
+44
+68
+71
+42
+72
+73
+42
+76
+77
+46
+121
+120
+92
+116
+115
+87
+102
+100
+77
+84
+82
+59
+76
+73
+54
+75
+74
+54
+70
+69
+51
+60
+61
+45
+60
+63
+52
+57
+63
+53
+57
+63
+53
+57
+63
+53
+56
+62
+52
+56
+62
+52
+56
+62
+52
+56
+62
+52
+55
+61
+51
+55
+61
+51
+56
+62
+52
+56
+62
+52
+56
+62
+52
+56
+62
+52
+57
+63
+53
+57
+63
+53
+58
+63
+57
+58
+63
+57
+58
+63
+57
+58
+63
+57
+57
+62
+56
+57
+62
+56
+57
+62
+56
+56
+61
+55
+56
+61
+55
+56
+61
+55
+55
+60
+54
+54
+59
+53
+53
+58
+52
+52
+57
+51
+51
+56
+50
+51
+56
+50
+47
+52
+48
+46
+51
+47
+45
+50
+46
+44
+49
+45
+43
+48
+44
+43
+48
+44
+43
+48
+44
+43
+48
+44
+43
+48
+44
+44
+49
+45
+45
+49
+48
+46
+50
+49
+47
+51
+50
+47
+51
+50
+47
+51
+50
+45
+52
+45
+51
+63
+49
+55
+70
+51
+61
+76
+55
+64
+79
+58
+63
+78
+55
+60
+75
+52
+57
+72
+49
+56
+71
+48
+53
+68
+45
+56
+71
+48
+60
+75
+54
+62
+77
+58
+60
+74
+57
+55
+69
+54
+49
+63
+50
+45
+57
+45
+44
+54
+45
+46
+53
+45
+45
+52
+44
+102
+99
+84
+102
+99
+84
+103
+100
+85
+104
+101
+86
+104
+101
+86
+105
+102
+87
+106
+103
+88
+106
+103
+88
+105
+102
+87
+105
+102
+87
+105
+102
+87
+105
+102
+87
+105
+102
+87
+105
+102
+87
+105
+102
+87
+105
+102
+87
+108
+100
+87
+108
+100
+87
+108
+99
+90
+109
+100
+91
+109
+100
+93
+109
+102
+92
+109
+103
+91
+106
+105
+87
+106
+108
+87
+104
+109
+86
+104
+114
+90
+102
+115
+95
+99
+113
+100
+104
+121
+115
+133
+151
+151
+165
+183
+187
+199
+210
+216
+218
+227
+234
+240
+245
+251
+248
+253
+255
+252
+253
+255
+253
+255
+254
+255
+255
+253
+255
+254
+249
+255
+255
+245
+255
+255
+242
+255
+255
+240
+252
+255
+236
+248
+251
+230
+239
+244
+221
+226
+235
+208
+221
+227
+199
+213
+213
+185
+206
+204
+179
+201
+196
+176
+202
+196
+180
+208
+201
+191
+218
+210
+207
+233
+224
+227
+246
+237
+242
+255
+246
+254
+255
+249
+255
+255
+252
+255
+255
+254
+255
+254
+254
+252
+252
+254
+249
+251
+255
+247
+252
+255
+248
+253
+255
+250
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+254
+254
+251
+255
+255
+252
+255
+254
+253
+255
+253
+255
+254
+250
+255
+250
+247
+255
+248
+246
+255
+243
+245
+255
+240
+243
+254
+238
+245
+255
+242
+250
+255
+246
+253
+255
+250
+255
+253
+254
+255
+251
+255
+255
+249
+255
+255
+248
+255
+252
+241
+255
+254
+245
+255
+255
+250
+255
+255
+253
+255
+255
+252
+255
+252
+251
+249
+248
+248
+240
+245
+245
+233
+255
+255
+241
+255
+255
+239
+255
+255
+237
+255
+255
+237
+255
+252
+234
+255
+246
+229
+251
+239
+223
+248
+235
+218
+249
+228
+209
+255
+230
+208
+227
+202
+180
+165
+143
+120
+116
+94
+71
+101
+79
+56
+98
+76
+53
+92
+72
+48
+94
+74
+50
+92
+74
+50
+92
+74
+50
+93
+75
+51
+93
+75
+51
+94
+76
+52
+94
+76
+52
+92
+77
+54
+89
+78
+56
+87
+79
+58
+87
+79
+58
+86
+80
+58
+85
+79
+57
+83
+78
+56
+80
+78
+55
+78
+78
+54
+77
+79
+55
+80
+84
+59
+96
+102
+76
+102
+111
+84
+85
+94
+67
+69
+79
+52
+65
+75
+48
+60
+70
+43
+63
+73
+46
+63
+73
+46
+67
+76
+47
+72
+78
+50
+72
+77
+47
+70
+73
+44
+79
+80
+49
+89
+88
+58
+113
+109
+82
+106
+102
+75
+97
+92
+70
+91
+86
+64
+89
+84
+65
+84
+81
+62
+77
+74
+57
+66
+67
+51
+61
+64
+53
+59
+65
+55
+59
+65
+55
+59
+65
+55
+58
+64
+54
+58
+64
+54
+58
+64
+54
+57
+63
+53
+56
+62
+52
+56
+62
+52
+56
+62
+52
+57
+63
+53
+57
+63
+53
+58
+64
+54
+58
+64
+54
+58
+64
+54
+59
+64
+58
+59
+64
+58
+59
+64
+58
+58
+63
+57
+58
+63
+57
+57
+62
+56
+57
+62
+56
+57
+62
+56
+58
+63
+57
+58
+63
+57
+57
+62
+56
+57
+62
+56
+56
+61
+55
+56
+61
+55
+55
+60
+54
+55
+60
+54
+52
+57
+53
+50
+55
+51
+49
+54
+50
+47
+52
+48
+45
+50
+46
+44
+49
+45
+43
+47
+46
+43
+47
+46
+44
+48
+47
+44
+48
+47
+45
+49
+48
+46
+50
+49
+46
+50
+51
+46
+50
+51
+45
+49
+50
+43
+49
+45
+43
+57
+42
+47
+64
+45
+54
+72
+50
+59
+77
+55
+61
+79
+55
+60
+78
+52
+58
+76
+50
+58
+76
+50
+53
+71
+47
+55
+73
+49
+58
+76
+54
+60
+77
+58
+58
+75
+57
+54
+71
+55
+48
+64
+51
+45
+59
+46
+45
+55
+46
+46
+53
+45
+45
+52
+44
+99
+100
+82
+99
+100
+82
+100
+101
+83
+101
+102
+84
+101
+102
+86
+104
+102
+87
+105
+103
+88
+105
+103
+88
+104
+102
+87
+105
+102
+87
+105
+102
+87
+105
+102
+87
+105
+102
+87
+105
+102
+87
+105
+102
+87
+107
+101
+87
+107
+101
+87
+107
+101
+87
+108
+100
+89
+108
+101
+91
+109
+100
+93
+109
+102
+92
+107
+103
+91
+106
+105
+87
+105
+107
+86
+104
+109
+87
+104
+114
+90
+103
+116
+96
+100
+113
+103
+106
+123
+117
+137
+155
+157
+170
+187
+194
+205
+216
+222
+223
+232
+239
+242
+249
+255
+250
+255
+255
+251
+255
+255
+253
+255
+254
+254
+255
+250
+254
+254
+246
+250
+250
+238
+250
+251
+237
+250
+251
+233
+248
+250
+229
+244
+246
+225
+234
+238
+215
+223
+227
+202
+217
+219
+195
+211
+209
+184
+204
+199
+177
+197
+190
+172
+198
+190
+177
+204
+195
+188
+214
+206
+204
+230
+221
+224
+244
+234
+242
+253
+246
+254
+254
+249
+255
+255
+253
+255
+254
+254
+255
+253
+253
+251
+252
+254
+249
+251
+255
+249
+252
+255
+250
+253
+255
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+254
+254
+252
+255
+254
+252
+255
+254
+252
+255
+254
+252
+255
+253
+254
+255
+250
+255
+255
+251
+255
+254
+252
+255
+252
+254
+253
+249
+255
+251
+246
+255
+247
+244
+255
+244
+243
+255
+241
+242
+254
+240
+245
+255
+242
+250
+255
+246
+254
+255
+250
+255
+252
+251
+255
+249
+252
+255
+247
+255
+255
+246
+255
+255
+248
+255
+255
+247
+255
+255
+249
+255
+255
+252
+255
+253
+252
+255
+251
+253
+252
+250
+255
+251
+252
+255
+250
+244
+250
+240
+244
+250
+238
+247
+249
+236
+247
+248
+234
+248
+246
+231
+251
+248
+231
+255
+250
+234
+255
+253
+234
+253
+241
+219
+255
+251
+228
+236
+220
+197
+158
+142
+119
+96
+80
+55
+82
+66
+41
+88
+72
+47
+88
+72
+47
+91
+77
+51
+91
+77
+51
+90
+78
+52
+90
+78
+52
+91
+79
+53
+91
+79
+53
+92
+80
+54
+91
+81
+56
+85
+79
+55
+84
+79
+57
+84
+79
+57
+81
+79
+56
+80
+78
+55
+78
+78
+54
+75
+77
+53
+73
+77
+52
+74
+78
+53
+76
+82
+56
+83
+92
+65
+80
+89
+60
+64
+73
+44
+59
+70
+40
+65
+76
+46
+63
+74
+42
+67
+78
+46
+68
+79
+47
+72
+81
+50
+76
+83
+50
+73
+78
+48
+74
+77
+46
+89
+90
+59
+107
+106
+78
+102
+101
+73
+98
+94
+69
+94
+89
+67
+95
+90
+70
+96
+91
+71
+90
+85
+66
+83
+78
+59
+76
+73
+56
+65
+66
+52
+64
+66
+53
+64
+66
+53
+62
+65
+54
+62
+65
+54
+62
+65
+54
+61
+64
+55
+61
+64
+55
+57
+63
+53
+57
+63
+53
+57
+63
+53
+58
+64
+54
+58
+64
+54
+58
+66
+55
+58
+66
+55
+58
+66
+55
+59
+64
+57
+59
+64
+57
+59
+64
+58
+58
+63
+56
+58
+63
+57
+57
+62
+55
+57
+62
+56
+57
+62
+55
+59
+64
+58
+59
+64
+57
+59
+64
+58
+59
+64
+57
+58
+63
+57
+58
+63
+56
+58
+63
+57
+58
+63
+57
+56
+63
+56
+55
+61
+57
+52
+59
+52
+51
+56
+50
+49
+54
+48
+47
+52
+46
+46
+51
+47
+46
+51
+47
+46
+50
+49
+46
+50
+49
+44
+50
+46
+44
+50
+46
+43
+50
+43
+43
+50
+42
+44
+52
+41
+41
+54
+37
+36
+54
+30
+41
+61
+33
+50
+70
+43
+56
+76
+49
+59
+79
+54
+59
+77
+53
+59
+77
+53
+59
+77
+53
+56
+74
+50
+57
+75
+51
+59
+77
+53
+60
+78
+54
+60
+78
+56
+55
+72
+53
+49
+66
+48
+46
+60
+45
+46
+56
+45
+47
+54
+46
+46
+53
+45
+92
+102
+78
+93
+103
+79
+95
+103
+80
+96
+104
+81
+98
+106
+85
+101
+106
+86
+103
+106
+87
+104
+107
+88
+102
+103
+85
+104
+103
+85
+104
+101
+86
+104
+101
+86
+106
+100
+86
+107
+101
+87
+107
+101
+89
+108
+102
+88
+107
+101
+87
+106
+103
+88
+109
+103
+91
+108
+104
+93
+109
+102
+94
+106
+102
+91
+104
+100
+88
+102
+100
+85
+102
+103
+85
+103
+108
+86
+102
+111
+90
+98
+111
+93
+99
+112
+103
+114
+130
+127
+150
+168
+172
+185
+199
+208
+209
+219
+228
+224
+233
+240
+240
+247
+253
+247
+252
+255
+247
+253
+251
+250
+255
+251
+252
+255
+248
+252
+254
+243
+248
+249
+235
+250
+251
+235
+249
+248
+230
+243
+240
+221
+239
+236
+217
+236
+233
+214
+224
+222
+201
+214
+209
+189
+216
+208
+189
+203
+191
+175
+188
+179
+164
+188
+178
+169
+195
+184
+180
+205
+195
+196
+219
+210
+215
+233
+223
+231
+250
+243
+251
+253
+248
+255
+254
+251
+255
+255
+254
+255
+254
+254
+255
+252
+254
+253
+251
+253
+250
+252
+254
+251
+254
+254
+254
+254
+254
+254
+254
+254
+254
+254
+254
+254
+254
+254
+254
+254
+254
+254
+255
+254
+252
+255
+254
+252
+255
+255
+253
+255
+255
+253
+255
+255
+251
+255
+254
+250
+255
+253
+250
+255
+252
+249
+255
+252
+249
+255
+252
+249
+255
+254
+255
+255
+253
+254
+253
+253
+253
+253
+253
+253
+254
+255
+255
+254
+255
+253
+251
+255
+252
+249
+254
+248
+253
+255
+250
+251
+252
+246
+253
+252
+247
+255
+255
+250
+255
+254
+248
+255
+249
+244
+255
+247
+243
+255
+250
+249
+255
+251
+255
+255
+252
+255
+254
+253
+255
+254
+255
+255
+254
+255
+255
+251
+255
+252
+251
+255
+252
+250
+254
+253
+252
+255
+255
+252
+255
+255
+255
+255
+253
+255
+254
+249
+255
+254
+242
+255
+254
+237
+255
+254
+234
+255
+254
+232
+251
+245
+223
+255
+252
+230
+233
+225
+202
+145
+137
+114
+86
+79
+53
+88
+78
+51
+85
+76
+47
+83
+74
+45
+87
+78
+49
+87
+78
+49
+85
+78
+49
+85
+78
+49
+84
+79
+50
+84
+79
+50
+84
+78
+52
+83
+79
+52
+81
+77
+50
+82
+78
+53
+80
+78
+53
+80
+80
+54
+77
+79
+55
+75
+79
+54
+72
+77
+54
+71
+76
+53
+74
+80
+54
+70
+79
+52
+65
+74
+45
+61
+70
+39
+62
+72
+38
+68
+75
+42
+70
+77
+43
+68
+78
+41
+77
+88
+48
+75
+87
+47
+70
+81
+41
+67
+77
+40
+79
+86
+52
+94
+99
+67
+96
+99
+68
+90
+90
+62
+89
+89
+63
+91
+89
+66
+95
+90
+68
+95
+90
+70
+95
+88
+69
+92
+85
+66
+88
+81
+62
+85
+78
+59
+75
+70
+51
+71
+68
+49
+68
+65
+48
+65
+63
+48
+64
+62
+49
+62
+62
+50
+63
+63
+53
+63
+65
+54
+60
+63
+54
+58
+64
+54
+58
+64
+54
+57
+65
+54
+57
+65
+52
+55
+66
+52
+55
+66
+52
+55
+66
+52
+58
+66
+55
+57
+65
+54
+57
+64
+56
+56
+64
+53
+56
+63
+55
+57
+65
+54
+57
+64
+56
+58
+66
+55
+58
+65
+57
+58
+66
+55
+57
+64
+56
+58
+66
+55
+59
+66
+58
+60
+68
+57
+61
+68
+60
+62
+69
+61
+56
+66
+58
+55
+65
+57
+55
+65
+56
+55
+63
+52
+53
+61
+48
+51
+59
+46
+50
+56
+46
+49
+54
+48
+46
+52
+48
+47
+53
+49
+45
+55
+47
+45
+57
+45
+46
+59
+41
+48
+64
+38
+54
+71
+39
+55
+77
+39
+59
+86
+43
+59
+88
+44
+60
+86
+49
+59
+84
+52
+59
+82
+56
+60
+79
+57
+61
+78
+59
+61
+79
+57
+58
+76
+54
+63
+81
+55
+68
+86
+60
+68
+87
+59
+67
+87
+60
+64
+84
+59
+55
+74
+52
+46
+63
+44
+45
+55
+44
+44
+51
+43
+41
+48
+40
+89
+103
+77
+90
+104
+78
+92
+104
+80
+93
+105
+81
+97
+107
+83
+98
+108
+84
+103
+108
+88
+103
+108
+88
+103
+104
+86
+103
+104
+86
+105
+102
+87
+105
+102
+87
+107
+101
+87
+108
+102
+88
+109
+101
+90
+109
+103
+89
+108
+102
+88
+106
+103
+88
+107
+103
+91
+108
+104
+93
+107
+103
+94
+106
+102
+91
+104
+102
+90
+101
+102
+86
+104
+105
+87
+103
+108
+86
+103
+112
+93
+102
+115
+98
+106
+119
+110
+121
+137
+136
+156
+171
+178
+186
+200
+209
+208
+218
+227
+224
+233
+238
+240
+247
+253
+246
+254
+255
+249
+255
+253
+249
+255
+249
+251
+254
+245
+249
+253
+239
+249
+250
+236
+248
+249
+231
+246
+243
+226
+238
+235
+216
+235
+230
+211
+230
+225
+206
+221
+214
+196
+210
+201
+184
+203
+191
+175
+193
+179
+166
+184
+172
+160
+187
+174
+166
+194
+183
+181
+205
+195
+196
+219
+208
+214
+228
+221
+228
+251
+243
+254
+253
+247
+255
+254
+251
+255
+255
+254
+255
+254
+253
+255
+252
+253
+255
+252
+254
+253
+252
+254
+253
+254
+254
+254
+254
+254
+254
+254
+254
+254
+254
+254
+254
+254
+254
+254
+254
+254
+254
+255
+254
+252
+255
+254
+252
+255
+255
+253
+255
+255
+253
+255
+253
+250
+255
+253
+250
+255
+253
+250
+255
+252
+249
+255
+252
+248
+255
+253
+248
+255
+254
+253
+255
+254
+252
+253
+253
+253
+253
+253
+253
+255
+255
+255
+255
+255
+255
+254
+254
+254
+253
+253
+253
+255
+255
+253
+255
+255
+251
+255
+252
+249
+254
+247
+241
+245
+236
+229
+238
+228
+219
+244
+231
+222
+250
+241
+234
+255
+252
+253
+254
+254
+255
+253
+255
+254
+254
+255
+253
+252
+255
+251
+251
+255
+250
+251
+255
+254
+250
+254
+255
+252
+255
+255
+252
+255
+255
+255
+254
+255
+254
+254
+252
+255
+253
+244
+255
+254
+236
+255
+253
+231
+255
+254
+229
+248
+246
+223
+254
+252
+231
+229
+224
+202
+141
+137
+112
+83
+77
+51
+84
+79
+50
+82
+75
+46
+81
+74
+45
+85
+79
+47
+85
+79
+47
+84
+79
+49
+84
+79
+49
+83
+79
+50
+83
+79
+50
+81
+80
+52
+81
+80
+52
+81
+77
+50
+79
+78
+50
+80
+78
+53
+78
+81
+54
+77
+79
+55
+74
+80
+54
+72
+77
+54
+69
+77
+53
+71
+80
+53
+69
+78
+49
+65
+74
+45
+63
+73
+39
+66
+73
+40
+70
+77
+43
+74
+80
+44
+74
+82
+43
+75
+86
+43
+75
+88
+42
+82
+93
+51
+89
+100
+60
+93
+101
+64
+87
+94
+60
+83
+88
+58
+83
+86
+57
+85
+85
+61
+86
+86
+62
+90
+85
+65
+91
+86
+66
+92
+85
+66
+92
+84
+65
+90
+82
+61
+89
+81
+60
+82
+76
+54
+80
+74
+52
+75
+70
+51
+72
+67
+48
+67
+64
+49
+65
+63
+50
+66
+64
+52
+63
+65
+54
+61
+62
+54
+58
+64
+54
+58
+64
+54
+57
+65
+54
+55
+66
+52
+55
+66
+52
+54
+67
+50
+54
+67
+50
+58
+66
+55
+57
+65
+54
+57
+65
+54
+56
+64
+53
+56
+64
+53
+57
+65
+54
+57
+65
+54
+58
+66
+55
+58
+66
+55
+58
+66
+55
+58
+66
+55
+58
+66
+55
+59
+67
+56
+60
+68
+57
+61
+69
+58
+60
+70
+59
+61
+71
+63
+60
+72
+62
+60
+70
+59
+60
+71
+55
+60
+68
+53
+58
+66
+51
+57
+63
+51
+56
+61
+54
+55
+62
+55
+52
+62
+54
+51
+61
+52
+48
+62
+45
+51
+67
+41
+57
+77
+42
+66
+89
+47
+71
+97
+49
+79
+112
+59
+76
+110
+59
+76
+105
+61
+70
+97
+62
+66
+89
+63
+60
+82
+61
+59
+76
+58
+58
+75
+56
+61
+79
+57
+68
+86
+60
+74
+93
+65
+76
+95
+65
+75
+95
+67
+72
+92
+64
+60
+83
+57
+51
+70
+48
+43
+53
+42
+43
+50
+42
+40
+47
+39
+89
+103
+77
+90
+104
+78
+92
+104
+80
+94
+106
+82
+97
+107
+83
+99
+109
+85
+103
+108
+88
+104
+109
+89
+105
+106
+88
+105
+106
+88
+107
+104
+89
+107
+104
+89
+108
+102
+88
+109
+103
+89
+110
+102
+91
+110
+104
+90
+108
+102
+88
+107
+104
+89
+107
+103
+91
+107
+103
+92
+107
+103
+94
+106
+102
+91
+104
+102
+90
+101
+102
+86
+104
+105
+87
+101
+106
+84
+100
+109
+90
+103
+116
+99
+111
+124
+115
+127
+143
+142
+157
+172
+179
+182
+196
+205
+204
+214
+223
+221
+230
+235
+239
+246
+252
+246
+254
+255
+249
+255
+253
+248
+255
+248
+248
+251
+242
+245
+249
+235
+244
+245
+231
+241
+242
+224
+236
+233
+216
+226
+223
+204
+222
+217
+198
+216
+211
+192
+208
+201
+183
+199
+190
+173
+192
+180
+164
+188
+174
+161
+187
+175
+163
+194
+181
+173
+204
+193
+191
+215
+205
+206
+227
+216
+222
+234
+227
+234
+251
+243
+254
+253
+247
+255
+254
+251
+255
+254
+253
+255
+253
+252
+255
+252
+253
+255
+252
+254
+253
+253
+255
+254
+254
+254
+254
+254
+254
+254
+254
+254
+254
+254
+254
+254
+254
+254
+254
+254
+254
+254
+255
+254
+252
+255
+254
+252
+255
+255
+253
+255
+254
+252
+255
+253
+250
+255
+253
+250
+255
+252
+249
+255
+252
+249
+255
+252
+248
+255
+253
+248
+255
+254
+253
+254
+253
+251
+252
+252
+252
+253
+253
+253
+254
+254
+254
+255
+255
+255
+254
+254
+254
+253
+253
+253
+255
+255
+253
+255
+255
+251
+255
+253
+250
+249
+242
+236
+232
+223
+216
+223
+213
+204
+234
+221
+212
+246
+237
+230
+255
+252
+253
+254
+254
+255
+253
+255
+254
+254
+255
+253
+252
+255
+251
+251
+255
+250
+251
+255
+254
+250
+254
+255
+252
+255
+255
+252
+255
+255
+255
+254
+255
+254
+254
+252
+255
+253
+244
+255
+254
+236
+255
+253
+231
+255
+254
+229
+249
+247
+224
+254
+252
+231
+228
+223
+201
+138
+134
+109
+80
+74
+48
+82
+77
+48
+82
+75
+46
+82
+75
+46
+84
+78
+46
+85
+79
+47
+84
+79
+49
+85
+80
+50
+84
+80
+51
+83
+79
+50
+81
+80
+52
+80
+79
+51
+81
+77
+50
+79
+78
+50
+80
+78
+53
+77
+80
+53
+77
+79
+55
+74
+80
+54
+73
+78
+55
+70
+78
+54
+72
+81
+54
+69
+78
+49
+67
+76
+47
+66
+76
+42
+70
+77
+44
+73
+80
+46
+79
+85
+49
+81
+89
+50
+80
+91
+48
+85
+98
+52
+103
+116
+73
+119
+130
+90
+112
+120
+83
+88
+95
+61
+76
+81
+51
+78
+81
+52
+80
+80
+56
+81
+81
+57
+84
+79
+59
+85
+80
+60
+87
+80
+61
+88
+81
+62
+91
+83
+62
+92
+84
+63
+89
+83
+61
+86
+80
+58
+81
+76
+57
+77
+72
+53
+71
+68
+53
+68
+66
+53
+67
+65
+53
+63
+65
+54
+61
+62
+54
+58
+64
+54
+58
+64
+54
+57
+65
+54
+55
+66
+52
+55
+66
+52
+54
+67
+50
+54
+67
+50
+58
+66
+55
+58
+66
+55
+57
+65
+54
+57
+65
+54
+57
+65
+54
+57
+65
+54
+58
+66
+55
+58
+66
+55
+58
+66
+55
+58
+66
+55
+58
+66
+55
+58
+66
+55
+59
+67
+56
+60
+68
+57
+62
+70
+59
+60
+70
+59
+64
+74
+66
+63
+75
+65
+64
+74
+63
+64
+75
+59
+65
+73
+58
+63
+71
+56
+63
+69
+57
+62
+67
+60
+62
+69
+62
+57
+67
+59
+54
+64
+55
+52
+66
+49
+57
+73
+47
+66
+86
+51
+80
+103
+61
+88
+114
+66
+94
+127
+74
+91
+125
+74
+87
+116
+72
+77
+104
+69
+67
+90
+64
+57
+79
+58
+54
+71
+53
+52
+69
+50
+60
+78
+56
+69
+87
+61
+77
+96
+68
+82
+101
+71
+82
+102
+74
+78
+98
+70
+65
+88
+62
+56
+75
+53
+47
+57
+46
+47
+54
+46
+44
+51
+43
+89
+103
+77
+90
+104
+78
+92
+104
+80
+94
+106
+82
+98
+108
+84
+100
+110
+86
+104
+109
+89
+105
+110
+90
+107
+108
+90
+107
+108
+90
+109
+106
+91
+108
+105
+90
+110
+104
+90
+110
+104
+90
+111
+103
+92
+111
+105
+91
+109
+103
+89
+107
+104
+89
+107
+103
+91
+107
+103
+92
+106
+102
+93
+106
+102
+91
+104
+102
+90
+102
+103
+87
+102
+103
+85
+97
+102
+80
+95
+104
+85
+100
+113
+96
+112
+125
+116
+127
+143
+142
+151
+166
+173
+171
+185
+194
+199
+209
+218
+217
+226
+231
+237
+244
+250
+245
+253
+255
+248
+254
+252
+245
+252
+245
+243
+246
+237
+238
+242
+228
+234
+235
+221
+228
+229
+211
+221
+218
+201
+212
+209
+190
+208
+203
+184
+202
+197
+178
+195
+188
+170
+189
+180
+163
+196
+184
+168
+198
+184
+171
+203
+191
+179
+213
+200
+192
+224
+213
+211
+234
+224
+225
+244
+233
+239
+248
+241
+248
+252
+244
+255
+253
+247
+255
+254
+251
+255
+254
+253
+255
+253
+252
+255
+251
+252
+254
+252
+254
+253
+253
+255
+254
+254
+254
+254
+254
+254
+254
+254
+254
+254
+254
+254
+254
+254
+254
+254
+254
+254
+254
+255
+254
+252
+255
+254
+252
+255
+254
+252
+255
+254
+252
+255
+253
+250
+255
+252
+249
+255
+252
+249
+255
+252
+249
+255
+251
+247
+255
+252
+247
+255
+253
+252
+253
+252
+250
+251
+251
+251
+252
+252
+252
+254
+254
+254
+255
+255
+255
+254
+254
+254
+253
+253
+253
+254
+253
+251
+255
+255
+251
+255
+253
+250
+250
+243
+237
+234
+225
+218
+227
+217
+208
+239
+226
+217
+251
+242
+235
+255
+252
+253
+254
+254
+255
+253
+255
+254
+254
+255
+253
+252
+255
+251
+251
+255
+250
+251
+255
+254
+250
+254
+255
+252
+255
+255
+252
+255
+255
+255
+254
+255
+254
+254
+252
+255
+253
+244
+255
+254
+236
+255
+252
+230
+255
+253
+228
+252
+250
+227
+255
+254
+233
+228
+223
+201
+137
+133
+108
+80
+74
+48
+82
+77
+48
+84
+77
+48
+84
+77
+48
+84
+78
+46
+85
+79
+47
+85
+80
+50
+85
+80
+50
+84
+80
+51
+83
+79
+50
+80
+79
+51
+79
+78
+50
+81
+77
+50
+79
+78
+50
+79
+77
+52
+76
+79
+52
+76
+78
+54
+74
+80
+54
+74
+79
+56
+71
+79
+55
+74
+83
+56
+71
+80
+51
+70
+79
+50
+72
+82
+48
+76
+83
+50
+78
+85
+51
+85
+91
+55
+91
+99
+60
+103
+114
+71
+115
+128
+82
+135
+148
+105
+144
+156
+116
+133
+143
+106
+110
+117
+83
+90
+95
+65
+82
+87
+57
+79
+79
+55
+78
+78
+54
+80
+75
+55
+79
+74
+54
+82
+75
+56
+85
+78
+59
+89
+81
+60
+91
+83
+62
+90
+84
+62
+88
+82
+60
+84
+79
+60
+80
+75
+56
+74
+71
+56
+71
+69
+56
+69
+67
+55
+65
+67
+56
+61
+62
+54
+58
+64
+54
+58
+64
+54
+57
+65
+54
+55
+66
+52
+55
+66
+52
+54
+67
+50
+54
+67
+50
+59
+67
+56
+58
+66
+55
+57
+65
+54
+57
+65
+54
+57
+65
+54
+57
+65
+54
+58
+66
+55
+59
+67
+56
+59
+67
+56
+58
+66
+55
+58
+66
+55
+59
+67
+56
+59
+67
+56
+61
+69
+58
+62
+70
+59
+61
+71
+60
+61
+71
+63
+60
+72
+62
+62
+72
+61
+62
+73
+57
+64
+72
+57
+63
+71
+56
+63
+69
+57
+63
+68
+61
+61
+68
+61
+57
+67
+59
+54
+64
+55
+52
+66
+49
+57
+73
+47
+68
+88
+53
+82
+105
+63
+91
+117
+69
+89
+122
+69
+87
+121
+70
+84
+113
+69
+73
+100
+65
+62
+85
+59
+51
+73
+52
+48
+65
+47
+46
+63
+44
+54
+72
+50
+64
+82
+56
+75
+94
+66
+82
+101
+71
+83
+103
+75
+79
+99
+71
+65
+88
+62
+54
+73
+51
+49
+59
+48
+48
+55
+47
+45
+52
+44
+89
+103
+77
+90
+104
+78
+92
+104
+80
+94
+106
+82
+98
+108
+84
+100
+110
+86
+105
+110
+90
+106
+111
+91
+109
+110
+92
+108
+109
+91
+110
+107
+92
+109
+106
+91
+110
+104
+90
+110
+104
+90
+112
+104
+93
+111
+105
+91
+109
+103
+89
+107
+104
+89
+106
+102
+90
+106
+102
+91
+105
+101
+92
+105
+101
+90
+104
+102
+90
+102
+103
+87
+103
+104
+86
+97
+102
+80
+94
+103
+84
+100
+113
+96
+112
+125
+116
+125
+141
+140
+145
+160
+167
+161
+175
+184
+194
+204
+213
+214
+223
+228
+234
+241
+247
+243
+251
+253
+245
+251
+249
+242
+249
+242
+239
+242
+233
+233
+237
+223
+227
+228
+214
+218
+219
+201
+211
+208
+191
+204
+201
+182
+201
+196
+177
+195
+190
+171
+190
+183
+165
+187
+178
+161
+202
+190
+174
+209
+195
+182
+218
+206
+194
+229
+216
+208
+238
+227
+225
+248
+238
+239
+255
+245
+251
+255
+249
+255
+252
+244
+255
+253
+247
+255
+253
+250
+255
+253
+252
+255
+252
+251
+255
+251
+252
+254
+252
+254
+253
+254
+255
+255
+254
+254
+254
+254
+254
+254
+254
+254
+254
+254
+254
+254
+254
+254
+254
+254
+254
+254
+255
+254
+252
+255
+254
+252
+255
+254
+252
+255
+254
+252
+255
+252
+249
+255
+252
+249
+255
+252
+249
+255
+251
+248
+255
+251
+247
+255
+252
+247
+255
+252
+251
+252
+251
+249
+251
+251
+251
+252
+252
+252
+254
+254
+254
+255
+255
+255
+254
+254
+254
+253
+253
+253
+254
+253
+251
+254
+253
+249
+255
+252
+249
+254
+247
+241
+245
+236
+229
+239
+229
+220
+247
+234
+225
+254
+245
+238
+255
+252
+253
+254
+254
+255
+253
+255
+254
+254
+255
+253
+252
+255
+251
+251
+255
+250
+251
+255
+254
+250
+254
+255
+251
+255
+255
+251
+255
+255
+254
+253
+255
+254
+254
+252
+255
+254
+245
+255
+254
+236
+255
+252
+230
+255
+252
+227
+254
+252
+229
+255
+255
+235
+229
+224
+202
+138
+134
+109
+81
+75
+49
+84
+79
+50
+86
+79
+50
+87
+80
+51
+84
+78
+46
+85
+79
+47
+86
+81
+51
+86
+81
+51
+85
+81
+52
+83
+79
+50
+79
+78
+50
+78
+77
+49
+81
+77
+50
+79
+78
+50
+79
+77
+52
+76
+79
+52
+76
+78
+54
+74
+80
+54
+74
+79
+56
+73
+81
+57
+76
+85
+58
+73
+82
+53
+74
+83
+54
+78
+88
+54
+81
+88
+55
+82
+89
+55
+91
+97
+61
+99
+107
+68
+129
+142
+98
+146
+162
+115
+161
+174
+131
+157
+169
+129
+148
+158
+121
+138
+145
+111
+115
+120
+90
+90
+95
+65
+80
+80
+56
+78
+78
+54
+78
+73
+53
+76
+71
+51
+78
+71
+52
+81
+74
+55
+86
+78
+57
+88
+80
+59
+88
+82
+60
+86
+80
+58
+83
+78
+59
+80
+75
+56
+76
+73
+58
+73
+71
+58
+71
+69
+57
+67
+69
+58
+61
+62
+54
+58
+64
+54
+58
+64
+54
+57
+65
+54
+55
+66
+52
+55
+66
+52
+54
+67
+50
+54
+67
+50
+59
+67
+56
+59
+67
+56
+58
+66
+55
+57
+65
+54
+57
+65
+54
+58
+66
+55
+59
+67
+56
+59
+67
+56
+59
+67
+56
+59
+67
+56
+59
+67
+56
+59
+67
+56
+60
+68
+57
+61
+69
+58
+62
+70
+59
+61
+71
+60
+59
+69
+61
+58
+70
+60
+60
+70
+59
+60
+71
+55
+62
+70
+55
+61
+69
+54
+62
+68
+56
+61
+66
+59
+58
+65
+58
+55
+65
+57
+53
+63
+54
+52
+66
+49
+57
+73
+47
+66
+86
+51
+78
+101
+59
+85
+111
+63
+83
+116
+63
+81
+115
+64
+79
+108
+64
+69
+96
+61
+57
+80
+54
+46
+68
+47
+44
+61
+43
+44
+61
+42
+49
+67
+45
+60
+78
+52
+73
+92
+64
+80
+99
+69
+82
+102
+74
+78
+98
+70
+63
+86
+60
+52
+71
+49
+43
+53
+42
+43
+50
+42
+40
+47
+39
diff --git a/privatemodules/nc4/share/hdf5_examples/hl/c/image8.txt b/privatemodules/nc4/share/hdf5_examples/hl/c/image8.txt
new file mode 100644
index 0000000000000000000000000000000000000000..4ba59809d5e60dbfeb0238184dd05dc68b70ad42
--- /dev/null
+++ b/privatemodules/nc4/share/hdf5_examples/hl/c/image8.txt
@@ -0,0 +1,120006 @@
+components
+1
+height
+400
+width
+300
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+12
+8
+5
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+61
+52
+39
+25
+10
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+93
+86
+77
+65
+48
+16
+6
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+108
+106
+104
+99
+88
+48
+23
+8
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+109
+107
+106
+106
+105
+98
+60
+26
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+107
+105
+104
+104
+105
+105
+100
+73
+37
+6
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+108
+105
+104
+104
+105
+105
+104
+93
+69
+29
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+109
+105
+103
+103
+104
+106
+106
+103
+89
+59
+12
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+111
+105
+103
+103
+104
+106
+107
+106
+100
+86
+29
+10
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+113
+105
+102
+101
+102
+105
+107
+108
+106
+100
+55
+20
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+115
+107
+102
+101
+100
+101
+104
+107
+108
+107
+88
+42
+15
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+118
+109
+103
+100
+99
+100
+102
+105
+108
+108
+99
+63
+30
+7
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+119
+111
+104
+100
+97
+100
+101
+103
+106
+109
+105
+82
+48
+17
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+2
+3
+3
+4
+5
+6
+7
+7
+8
+9
+9
+9
+9
+9
+8
+7
+7
+6
+4
+3
+2
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+119
+113
+106
+100
+97
+100
+101
+102
+104
+108
+108
+95
+65
+30
+6
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+3
+4
+6
+7
+9
+11
+13
+16
+18
+20
+22
+24
+26
+27
+27
+28
+28
+27
+25
+24
+22
+20
+16
+13
+11
+8
+6
+3
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+119
+115
+109
+102
+97
+100
+103
+104
+104
+106
+108
+103
+79
+46
+15
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+4
+6
+9
+12
+17
+21
+25
+30
+34
+40
+44
+48
+52
+55
+58
+60
+61
+62
+62
+60
+58
+56
+52
+48
+41
+35
+29
+23
+18
+11
+7
+4
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+115
+114
+111
+106
+99
+97
+104
+106
+106
+106
+107
+106
+91
+65
+30
+7
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+3
+6
+9
+13
+20
+26
+33
+41
+49
+59
+66
+74
+80
+87
+94
+98
+102
+106
+109
+112
+113
+114
+115
+115
+115
+114
+112
+109
+105
+98
+91
+82
+72
+61
+46
+36
+26
+18
+12
+5
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+109
+111
+110
+107
+103
+97
+104
+107
+108
+107
+107
+107
+97
+77
+44
+16
+7
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+4
+6
+11
+17
+24
+31
+40
+52
+62
+71
+79
+87
+95
+100
+104
+107
+110
+113
+115
+117
+119
+120
+121
+122
+123
+124
+124
+125
+125
+124
+124
+123
+120
+118
+113
+108
+101
+87
+75
+62
+49
+36
+21
+13
+7
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+102
+104
+106
+107
+106
+98
+101
+106
+109
+108
+108
+107
+101
+85
+56
+27
+14
+6
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+6
+10
+15
+22
+33
+43
+53
+64
+74
+85
+93
+99
+104
+109
+113
+115
+117
+119
+120
+121
+122
+123
+124
+124
+125
+126
+126
+127
+128
+128
+129
+129
+129
+129
+129
+129
+127
+125
+122
+115
+106
+96
+84
+70
+50
+37
+25
+16
+9
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+95
+97
+101
+104
+106
+100
+99
+104
+109
+110
+108
+108
+104
+92
+67
+38
+23
+12
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+3
+6
+12
+18
+27
+36
+48
+63
+75
+85
+95
+103
+110
+113
+116
+117
+118
+119
+120
+120
+121
+121
+122
+122
+122
+123
+123
+124
+124
+125
+126
+126
+127
+128
+129
+129
+130
+130
+130
+131
+131
+130
+129
+127
+122
+114
+104
+85
+69
+53
+38
+25
+11
+6
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+90
+92
+95
+99
+105
+105
+98
+102
+108
+111
+110
+109
+106
+98
+79
+48
+33
+19
+9
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+5
+10
+17
+29
+41
+55
+69
+83
+99
+107
+112
+115
+116
+117
+118
+118
+119
+119
+120
+120
+120
+120
+120
+119
+119
+119
+119
+119
+119
+119
+120
+121
+122
+123
+124
+126
+127
+128
+129
+130
+131
+131
+131
+131
+131
+131
+129
+128
+120
+108
+91
+73
+53
+31
+18
+10
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+89
+90
+93
+96
+99
+105
+100
+98
+101
+110
+111
+110
+108
+101
+85
+68
+54
+37
+21
+7
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+9
+16
+26
+38
+52
+74
+88
+100
+109
+114
+115
+116
+117
+117
+118
+118
+117
+117
+115
+113
+111
+110
+109
+108
+108
+108
+109
+109
+110
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+121
+123
+124
+126
+128
+129
+131
+131
+131
+131
+132
+131
+130
+127
+120
+108
+83
+62
+43
+26
+14
+4
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+88
+89
+91
+95
+98
+104
+103
+99
+98
+106
+110
+110
+108
+102
+90
+71
+62
+50
+36
+18
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+4
+8
+15
+29
+42
+58
+73
+88
+102
+108
+111
+114
+116
+116
+116
+116
+115
+113
+110
+108
+107
+106
+105
+105
+105
+106
+106
+107
+107
+108
+109
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+123
+124
+125
+126
+128
+129
+130
+131
+132
+132
+132
+131
+129
+126
+115
+101
+83
+63
+44
+21
+11
+5
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+87
+88
+90
+93
+99
+103
+104
+101
+97
+99
+107
+109
+108
+103
+92
+74
+65
+57
+47
+31
+9
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+8
+15
+25
+38
+59
+74
+88
+99
+107
+114
+115
+115
+115
+115
+113
+111
+109
+107
+105
+103
+102
+102
+102
+102
+103
+104
+105
+106
+108
+109
+111
+112
+113
+114
+116
+117
+118
+118
+119
+119
+120
+120
+120
+121
+122
+122
+123
+124
+125
+126
+128
+129
+130
+131
+132
+132
+133
+133
+133
+130
+124
+113
+99
+81
+53
+34
+20
+10
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+87
+87
+88
+92
+100
+103
+104
+103
+99
+93
+101
+104
+105
+101
+93
+75
+66
+60
+54
+44
+18
+7
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+4
+11
+22
+35
+51
+68
+90
+102
+110
+114
+115
+115
+115
+113
+111
+110
+106
+103
+100
+99
+98
+99
+100
+101
+102
+104
+106
+108
+110
+113
+115
+118
+120
+123
+124
+126
+128
+129
+130
+130
+130
+130
+129
+129
+128
+127
+126
+126
+126
+126
+126
+126
+127
+128
+129
+130
+131
+132
+133
+133
+134
+134
+133
+131
+125
+115
+90
+68
+46
+27
+13
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+87
+87
+88
+92
+102
+105
+105
+104
+102
+95
+90
+97
+99
+97
+93
+76
+66
+61
+57
+54
+32
+13
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+6
+12
+28
+46
+66
+86
+104
+113
+114
+115
+115
+115
+114
+112
+107
+102
+98
+95
+95
+96
+96
+98
+99
+101
+103
+106
+109
+114
+119
+124
+129
+133
+138
+142
+145
+148
+150
+152
+153
+153
+153
+152
+150
+149
+147
+144
+142
+138
+136
+133
+131
+129
+128
+128
+128
+129
+129
+130
+131
+132
+133
+134
+134
+135
+135
+134
+133
+125
+108
+84
+58
+33
+11
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+90
+90
+91
+95
+104
+108
+107
+106
+104
+102
+91
+86
+86
+89
+89
+83
+71
+63
+60
+58
+48
+25
+10
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+5
+13
+26
+44
+74
+94
+107
+113
+114
+115
+115
+114
+112
+108
+100
+96
+94
+93
+93
+95
+96
+97
+100
+103
+110
+117
+125
+133
+141
+151
+158
+164
+169
+174
+178
+181
+183
+185
+186
+187
+187
+187
+187
+186
+185
+183
+182
+179
+176
+172
+168
+164
+159
+154
+148
+143
+139
+136
+133
+132
+132
+132
+133
+133
+134
+135
+135
+135
+135
+134
+132
+125
+110
+87
+49
+25
+11
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+93
+93
+96
+102
+107
+108
+107
+106
+105
+104
+96
+88
+83
+81
+82
+80
+75
+69
+64
+61
+55
+35
+16
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+9
+20
+38
+59
+81
+101
+108
+112
+114
+114
+113
+110
+105
+100
+96
+93
+92
+92
+93
+94
+98
+102
+109
+117
+127
+139
+149
+157
+164
+171
+178
+182
+185
+187
+189
+191
+192
+193
+193
+194
+194
+194
+193
+193
+193
+192
+191
+189
+188
+186
+184
+181
+179
+176
+173
+169
+164
+160
+155
+150
+143
+140
+137
+135
+134
+134
+135
+135
+135
+135
+135
+134
+132
+127
+117
+89
+61
+36
+17
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+96
+97
+101
+106
+109
+109
+107
+106
+105
+105
+101
+95
+87
+80
+77
+76
+75
+71
+67
+63
+59
+43
+23
+7
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+4
+9
+27
+47
+69
+88
+103
+112
+113
+113
+113
+111
+105
+100
+96
+92
+90
+91
+92
+94
+98
+103
+114
+123
+134
+145
+155
+167
+174
+179
+184
+188
+192
+193
+195
+195
+196
+196
+196
+196
+196
+195
+195
+194
+194
+193
+193
+192
+192
+191
+190
+189
+188
+186
+185
+183
+182
+179
+177
+174
+170
+166
+160
+155
+150
+145
+141
+138
+136
+136
+135
+135
+135
+135
+135
+134
+131
+117
+96
+71
+44
+22
+5
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+99
+100
+104
+109
+110
+108
+106
+105
+105
+105
+104
+101
+95
+86
+76
+72
+72
+71
+69
+66
+62
+50
+30
+11
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+5
+13
+26
+55
+78
+96
+108
+112
+113
+112
+111
+108
+103
+95
+91
+89
+89
+89
+93
+97
+103
+112
+122
+139
+152
+163
+172
+180
+187
+190
+193
+195
+196
+196
+196
+196
+196
+196
+195
+194
+193
+192
+191
+189
+188
+187
+186
+186
+185
+185
+185
+185
+185
+185
+184
+184
+183
+183
+182
+181
+181
+179
+178
+174
+170
+165
+159
+153
+146
+142
+139
+137
+136
+136
+135
+135
+135
+135
+132
+123
+105
+80
+51
+19
+8
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+102
+103
+107
+110
+110
+104
+103
+103
+104
+105
+105
+105
+101
+94
+81
+70
+69
+69
+68
+67
+64
+56
+36
+15
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+5
+14
+30
+55
+93
+104
+110
+113
+114
+112
+110
+104
+97
+90
+87
+87
+87
+89
+91
+99
+110
+124
+140
+155
+171
+180
+186
+190
+193
+195
+196
+197
+197
+197
+197
+196
+195
+193
+192
+189
+186
+184
+181
+179
+175
+173
+172
+170
+169
+169
+169
+170
+171
+173
+175
+177
+178
+179
+180
+181
+181
+181
+180
+179
+178
+178
+176
+173
+170
+162
+155
+149
+143
+139
+137
+136
+136
+135
+135
+135
+134
+129
+116
+92
+47
+23
+9
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+103
+105
+108
+110
+110
+103
+101
+102
+103
+105
+105
+105
+103
+98
+87
+70
+68
+67
+67
+66
+65
+60
+42
+20
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+7
+23
+47
+75
+100
+109
+112
+113
+113
+111
+104
+95
+89
+86
+84
+86
+88
+92
+100
+111
+135
+151
+165
+177
+185
+191
+194
+195
+196
+197
+197
+196
+195
+194
+192
+189
+185
+181
+177
+172
+165
+159
+154
+149
+144
+138
+134
+130
+127
+125
+123
+123
+124
+125
+127
+132
+136
+141
+146
+151
+158
+164
+169
+173
+176
+177
+177
+177
+176
+175
+174
+172
+168
+163
+156
+146
+141
+138
+136
+136
+135
+135
+135
+132
+128
+104
+68
+37
+14
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+104
+105
+107
+109
+110
+103
+101
+101
+102
+104
+104
+104
+101
+95
+86
+70
+67
+66
+66
+66
+65
+61
+44
+23
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+7
+27
+54
+79
+97
+107
+112
+112
+111
+108
+101
+92
+87
+85
+85
+86
+90
+99
+112
+128
+144
+164
+175
+183
+188
+193
+195
+196
+196
+196
+195
+194
+192
+189
+185
+180
+173
+167
+160
+153
+145
+135
+128
+122
+115
+110
+103
+99
+95
+92
+89
+87
+87
+87
+87
+88
+91
+94
+98
+103
+108
+117
+125
+133
+141
+149
+159
+165
+170
+173
+174
+174
+173
+172
+170
+167
+161
+154
+148
+142
+138
+136
+136
+135
+134
+133
+124
+104
+76
+45
+18
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+103
+105
+107
+109
+110
+105
+102
+101
+102
+104
+104
+102
+97
+91
+84
+71
+66
+65
+65
+65
+65
+62
+46
+24
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+10
+24
+58
+82
+98
+107
+111
+112
+110
+105
+98
+91
+84
+83
+84
+87
+92
+106
+122
+138
+155
+170
+182
+188
+192
+195
+196
+196
+196
+195
+193
+191
+186
+182
+176
+169
+162
+151
+142
+133
+124
+115
+104
+97
+91
+85
+80
+76
+73
+71
+69
+67
+66
+66
+66
+66
+66
+68
+69
+72
+74
+78
+84
+89
+96
+103
+112
+125
+135
+145
+153
+161
+168
+171
+172
+172
+171
+168
+164
+159
+154
+147
+141
+138
+136
+135
+135
+133
+124
+107
+81
+48
+15
+6
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+103
+104
+106
+108
+109
+106
+103
+102
+103
+104
+103
+99
+92
+85
+82
+74
+67
+64
+64
+65
+65
+62
+46
+24
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+10
+26
+51
+88
+101
+108
+111
+112
+109
+103
+96
+88
+84
+81
+84
+88
+95
+107
+130
+150
+165
+177
+187
+192
+195
+196
+196
+196
+195
+193
+190
+187
+182
+174
+166
+157
+148
+137
+123
+112
+103
+93
+85
+76
+71
+67
+63
+61
+59
+58
+57
+57
+57
+57
+57
+57
+57
+57
+57
+58
+58
+59
+60
+62
+64
+67
+72
+78
+88
+98
+110
+121
+134
+150
+158
+164
+168
+170
+171
+170
+168
+165
+159
+150
+144
+140
+137
+136
+135
+133
+127
+112
+85
+39
+18
+6
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+102
+103
+105
+106
+107
+107
+105
+104
+104
+105
+104
+93
+85
+80
+80
+78
+69
+65
+64
+65
+65
+62
+45
+23
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+8
+25
+52
+86
+106
+109
+110
+111
+111
+103
+92
+85
+81
+80
+82
+87
+98
+114
+135
+161
+175
+185
+191
+195
+197
+197
+197
+196
+194
+191
+187
+182
+176
+169
+156
+144
+132
+120
+107
+91
+81
+73
+66
+61
+57
+56
+55
+55
+54
+54
+54
+54
+54
+55
+55
+55
+55
+55
+55
+56
+56
+56
+56
+57
+57
+57
+58
+59
+60
+62
+66
+72
+80
+92
+112
+129
+143
+156
+165
+170
+171
+171
+170
+169
+163
+155
+147
+141
+137
+136
+135
+134
+130
+122
+79
+42
+17
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+100
+101
+102
+103
+104
+107
+106
+106
+107
+108
+97
+85
+80
+80
+81
+80
+73
+67
+64
+65
+65
+61
+42
+19
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+9
+33
+64
+92
+106
+109
+110
+110
+107
+101
+87
+82
+79
+79
+82
+93
+110
+131
+153
+171
+186
+191
+195
+197
+197
+197
+195
+193
+190
+187
+180
+172
+162
+151
+138
+119
+104
+91
+80
+70
+61
+58
+55
+54
+53
+53
+53
+53
+53
+53
+54
+54
+54
+54
+54
+54
+54
+55
+55
+55
+55
+55
+55
+56
+56
+56
+56
+56
+57
+57
+57
+58
+59
+60
+62
+68
+76
+89
+105
+123
+145
+159
+166
+170
+170
+169
+167
+164
+157
+148
+140
+137
+136
+135
+133
+124
+94
+58
+26
+6
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+99
+99
+99
+100
+102
+103
+105
+106
+107
+109
+91
+82
+80
+81
+82
+80
+72
+67
+65
+65
+65
+57
+36
+14
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+6
+31
+64
+88
+103
+108
+109
+109
+105
+98
+89
+81
+79
+79
+84
+93
+116
+138
+157
+174
+185
+194
+196
+197
+197
+196
+193
+191
+187
+182
+176
+164
+151
+138
+123
+108
+90
+78
+69
+63
+58
+55
+54
+53
+53
+53
+53
+53
+53
+53
+53
+53
+53
+54
+54
+54
+54
+54
+54
+54
+54
+55
+55
+55
+55
+55
+55
+56
+56
+56
+56
+57
+57
+58
+58
+59
+61
+64
+69
+76
+86
+106
+124
+139
+153
+164
+168
+168
+168
+165
+160
+150
+144
+139
+136
+135
+131
+119
+94
+62
+26
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+98
+98
+97
+97
+99
+100
+103
+105
+107
+109
+88
+81
+80
+81
+81
+78
+70
+66
+65
+65
+64
+52
+30
+10
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+7
+21
+61
+87
+101
+107
+109
+109
+105
+98
+89
+81
+77
+79
+85
+96
+113
+142
+162
+177
+187
+194
+197
+197
+196
+195
+193
+189
+184
+178
+169
+159
+141
+125
+110
+96
+82
+69
+62
+58
+55
+53
+52
+52
+52
+52
+52
+53
+53
+53
+53
+53
+53
+53
+53
+53
+53
+53
+53
+53
+53
+53
+54
+54
+54
+54
+54
+54
+55
+55
+55
+56
+56
+56
+57
+57
+57
+58
+59
+60
+62
+66
+78
+90
+105
+122
+139
+156
+164
+168
+168
+166
+160
+154
+147
+142
+137
+135
+131
+118
+95
+61
+19
+7
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+98
+97
+96
+95
+96
+98
+100
+103
+106
+109
+90
+82
+81
+81
+78
+74
+68
+66
+65
+66
+63
+44
+22
+6
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+6
+19
+45
+88
+101
+107
+108
+108
+106
+98
+88
+81
+77
+78
+84
+97
+115
+138
+167
+181
+190
+195
+198
+198
+196
+194
+191
+188
+182
+174
+164
+151
+137
+114
+98
+84
+73
+64
+57
+54
+53
+52
+52
+52
+52
+52
+52
+52
+52
+52
+52
+52
+53
+53
+53
+53
+53
+53
+52
+52
+52
+52
+52
+52
+52
+53
+53
+53
+53
+53
+54
+54
+54
+55
+55
+56
+56
+56
+57
+57
+58
+58
+59
+62
+66
+75
+89
+106
+132
+148
+159
+165
+167
+166
+163
+157
+150
+143
+137
+135
+131
+120
+98
+47
+21
+7
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+98
+97
+96
+95
+95
+96
+96
+99
+104
+109
+98
+83
+80
+80
+73
+70
+67
+66
+66
+66
+60
+33
+14
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+15
+39
+75
+103
+106
+108
+108
+107
+99
+87
+80
+76
+75
+82
+96
+117
+141
+165
+185
+192
+196
+198
+198
+196
+193
+190
+187
+182
+172
+160
+144
+127
+109
+87
+74
+65
+58
+54
+52
+52
+52
+52
+52
+52
+52
+52
+52
+52
+52
+52
+52
+52
+52
+52
+52
+52
+52
+52
+52
+52
+51
+51
+51
+51
+51
+51
+51
+51
+52
+52
+52
+52
+53
+53
+54
+54
+55
+55
+56
+57
+57
+57
+58
+58
+59
+61
+65
+71
+94
+116
+136
+153
+164
+167
+168
+166
+162
+153
+141
+138
+135
+132
+126
+88
+46
+18
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+97
+97
+96
+95
+95
+95
+95
+96
+100
+107
+107
+79
+76
+80
+73
+70
+68
+67
+66
+64
+40
+17
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+14
+41
+73
+100
+107
+108
+107
+105
+99
+85
+78
+75
+76
+80
+101
+126
+150
+172
+188
+196
+198
+199
+198
+195
+191
+188
+183
+176
+167
+147
+129
+110
+92
+77
+63
+58
+54
+52
+52
+51
+51
+51
+51
+51
+51
+52
+52
+52
+52
+52
+52
+52
+52
+52
+51
+51
+51
+51
+51
+51
+51
+51
+51
+51
+51
+51
+51
+51
+51
+51
+51
+51
+51
+51
+51
+51
+52
+52
+53
+53
+54
+55
+56
+56
+57
+58
+58
+59
+60
+64
+72
+87
+108
+132
+158
+165
+167
+166
+164
+157
+148
+141
+137
+134
+125
+96
+58
+23
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+97
+97
+96
+95
+95
+95
+95
+96
+98
+102
+108
+78
+75
+80
+75
+71
+69
+67
+63
+54
+23
+9
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+8
+32
+64
+91
+104
+107
+107
+105
+99
+90
+77
+75
+76
+82
+94
+125
+150
+171
+186
+194
+198
+199
+197
+195
+191
+186
+181
+173
+162
+147
+122
+104
+87
+74
+63
+56
+54
+52
+51
+51
+51
+51
+51
+51
+51
+51
+52
+52
+52
+52
+52
+52
+52
+51
+51
+51
+51
+51
+51
+51
+51
+51
+51
+51
+50
+50
+50
+50
+50
+50
+50
+50
+50
+50
+51
+51
+51
+51
+51
+51
+52
+52
+53
+54
+54
+56
+56
+57
+58
+59
+60
+63
+70
+80
+96
+125
+144
+157
+164
+165
+164
+159
+151
+143
+138
+132
+120
+93
+58
+21
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+97
+97
+96
+96
+96
+96
+95
+95
+96
+99
+108
+80
+75
+78
+76
+72
+69
+64
+55
+38
+11
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+21
+55
+83
+101
+106
+107
+105
+99
+91
+81
+74
+75
+81
+94
+114
+149
+171
+185
+194
+198
+199
+197
+194
+191
+187
+180
+171
+158
+143
+124
+99
+83
+71
+62
+56
+53
+52
+51
+51
+51
+51
+51
+51
+51
+51
+51
+52
+52
+52
+52
+52
+51
+51
+51
+51
+50
+50
+50
+50
+50
+50
+50
+50
+50
+50
+50
+50
+50
+49
+49
+49
+49
+49
+49
+50
+50
+50
+50
+50
+50
+51
+51
+51
+52
+52
+54
+54
+55
+56
+57
+58
+60
+62
+66
+73
+92
+113
+132
+149
+160
+166
+164
+159
+153
+145
+137
+132
+117
+92
+54
+14
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+96
+97
+96
+96
+96
+97
+96
+95
+95
+96
+107
+87
+77
+74
+77
+72
+67
+58
+43
+22
+5
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+8
+41
+76
+96
+105
+107
+105
+100
+92
+83
+74
+73
+78
+91
+111
+138
+171
+186
+194
+198
+199
+198
+194
+190
+186
+181
+171
+157
+140
+121
+101
+78
+67
+59
+55
+52
+51
+51
+51
+50
+50
+50
+51
+51
+51
+51
+52
+52
+52
+52
+52
+51
+51
+51
+50
+50
+50
+50
+50
+50
+50
+50
+50
+49
+49
+49
+49
+49
+48
+48
+48
+48
+48
+48
+48
+48
+48
+49
+49
+49
+50
+50
+50
+50
+51
+51
+52
+52
+53
+54
+56
+57
+58
+59
+60
+62
+69
+83
+102
+123
+145
+161
+164
+164
+161
+154
+144
+138
+132
+119
+92
+38
+15
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+96
+96
+96
+96
+96
+97
+98
+97
+95
+95
+103
+101
+83
+69
+75
+69
+61
+47
+29
+11
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+7
+17
+65
+91
+103
+106
+106
+102
+95
+84
+76
+72
+74
+86
+107
+133
+161
+188
+195
+198
+199
+198
+195
+190
+186
+181
+174
+158
+139
+118
+98
+79
+63
+57
+54
+52
+51
+51
+50
+50
+50
+50
+50
+51
+51
+51
+52
+52
+52
+52
+52
+51
+51
+50
+50
+50
+50
+50
+49
+49
+49
+49
+49
+49
+48
+48
+48
+47
+47
+47
+47
+47
+46
+46
+46
+46
+46
+46
+47
+47
+47
+48
+49
+49
+50
+50
+50
+51
+51
+51
+52
+53
+55
+56
+57
+58
+59
+61
+65
+75
+91
+114
+147
+159
+164
+164
+163
+155
+145
+139
+133
+125
+79
+36
+12
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+96
+96
+96
+96
+96
+97
+99
+99
+98
+95
+96
+103
+90
+72
+66
+65
+53
+36
+19
+7
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+4
+16
+42
+92
+101
+105
+106
+103
+94
+83
+75
+71
+72
+85
+108
+135
+162
+185
+198
+199
+198
+197
+195
+189
+184
+178
+170
+157
+132
+110
+90
+74
+62
+54
+53
+52
+51
+51
+50
+50
+50
+50
+50
+51
+51
+52
+52
+52
+52
+52
+51
+51
+50
+49
+49
+49
+49
+49
+49
+49
+49
+49
+48
+48
+48
+48
+47
+47
+47
+47
+47
+46
+46
+46
+46
+46
+45
+45
+45
+45
+45
+45
+45
+46
+46
+47
+48
+49
+50
+50
+51
+51
+51
+52
+53
+54
+56
+57
+59
+60
+62
+66
+74
+101
+126
+146
+160
+165
+164
+159
+150
+142
+136
+124
+88
+48
+15
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+96
+96
+96
+95
+95
+97
+99
+101
+101
+97
+96
+102
+98
+86
+65
+57
+49
+34
+18
+6
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+10
+30
+64
+99
+104
+105
+103
+99
+87
+77
+72
+72
+76
+101
+129
+156
+179
+194
+199
+199
+197
+195
+191
+184
+178
+169
+157
+139
+111
+91
+75
+63
+56
+53
+52
+51
+51
+50
+50
+50
+50
+50
+51
+52
+52
+52
+52
+52
+52
+51
+50
+50
+49
+49
+49
+49
+49
+49
+49
+49
+49
+48
+48
+48
+48
+47
+47
+47
+47
+47
+47
+47
+47
+46
+46
+46
+46
+46
+45
+45
+45
+45
+45
+45
+45
+45
+46
+46
+48
+49
+50
+50
+51
+51
+52
+52
+53
+54
+57
+58
+60
+62
+65
+77
+95
+117
+138
+156
+164
+163
+159
+152
+143
+133
+117
+85
+47
+13
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+95
+95
+95
+95
+95
+97
+99
+101
+103
+101
+96
+99
+101
+94
+72
+50
+41
+29
+16
+6
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+4
+19
+45
+82
+103
+105
+104
+100
+94
+80
+73
+72
+75
+86
+120
+149
+173
+190
+199
+199
+198
+195
+191
+186
+179
+170
+158
+141
+120
+91
+75
+64
+56
+53
+52
+51
+50
+50
+50
+50
+50
+50
+51
+51
+52
+52
+52
+52
+52
+51
+50
+50
+49
+49
+49
+49
+49
+49
+49
+49
+48
+48
+48
+48
+48
+48
+48
+48
+48
+48
+48
+48
+48
+48
+48
+48
+47
+47
+47
+47
+46
+46
+45
+45
+44
+44
+44
+44
+45
+45
+46
+47
+49
+50
+51
+51
+51
+52
+53
+54
+56
+58
+59
+61
+66
+75
+91
+111
+134
+156
+162
+162
+159
+152
+141
+132
+113
+83
+42
+8
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+95
+95
+95
+95
+95
+97
+99
+101
+104
+104
+98
+98
+100
+98
+84
+48
+34
+22
+13
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+8
+30
+60
+95
+105
+105
+102
+96
+88
+74
+71
+73
+82
+100
+139
+167
+186
+197
+200
+198
+196
+192
+187
+181
+172
+160
+143
+123
+100
+75
+63
+56
+53
+52
+51
+50
+50
+50
+49
+50
+50
+51
+52
+52
+53
+53
+52
+52
+51
+50
+49
+49
+49
+49
+49
+49
+49
+49
+49
+48
+48
+48
+48
+48
+48
+48
+48
+48
+48
+48
+49
+49
+49
+49
+49
+49
+49
+49
+49
+48
+48
+47
+47
+46
+45
+45
+44
+44
+44
+44
+44
+45
+46
+48
+49
+50
+51
+51
+51
+52
+53
+55
+57
+59
+61
+64
+72
+85
+105
+137
+153
+161
+162
+160
+149
+141
+132
+114
+80
+25
+9
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+95
+95
+94
+95
+95
+97
+99
+102
+104
+106
+103
+98
+99
+101
+98
+57
+33
+17
+7
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+15
+43
+76
+101
+106
+103
+98
+91
+81
+70
+70
+77
+92
+117
+159
+183
+195
+200
+200
+196
+193
+188
+183
+176
+164
+147
+126
+104
+82
+63
+56
+53
+52
+51
+50
+50
+49
+49
+49
+50
+51
+52
+52
+53
+53
+53
+52
+51
+50
+49
+49
+49
+49
+49
+49
+49
+49
+49
+48
+48
+48
+48
+48
+48
+49
+49
+49
+49
+49
+49
+49
+49
+49
+49
+49
+50
+50
+50
+50
+51
+51
+50
+50
+49
+47
+46
+45
+44
+44
+44
+44
+44
+44
+45
+47
+48
+50
+51
+51
+51
+52
+53
+54
+56
+59
+61
+63
+68
+77
+106
+134
+152
+162
+163
+160
+150
+140
+131
+119
+59
+22
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+94
+94
+94
+95
+95
+99
+102
+104
+105
+107
+107
+102
+100
+100
+103
+89
+47
+20
+6
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+5
+27
+61
+92
+104
+105
+100
+93
+83
+73
+68
+74
+88
+111
+142
+182
+194
+200
+200
+198
+193
+188
+182
+175
+167
+147
+125
+102
+82
+65
+55
+53
+52
+51
+50
+49
+49
+49
+49
+50
+51
+52
+53
+53
+53
+53
+52
+51
+50
+49
+49
+49
+49
+49
+49
+49
+49
+49
+48
+48
+48
+49
+49
+49
+49
+49
+49
+49
+49
+49
+49
+49
+49
+49
+49
+49
+49
+50
+50
+50
+51
+51
+51
+52
+52
+52
+51
+50
+48
+46
+44
+44
+43
+43
+43
+44
+45
+47
+48
+50
+51
+51
+52
+52
+52
+55
+58
+60
+62
+64
+73
+93
+119
+143
+160
+163
+161
+153
+143
+133
+115
+66
+28
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+94
+94
+94
+95
+96
+101
+103
+105
+107
+107
+108
+105
+102
+100
+102
+97
+67
+34
+9
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+9
+39
+72
+97
+104
+104
+96
+87
+78
+70
+69
+79
+99
+127
+160
+191
+198
+200
+198
+195
+190
+183
+177
+168
+157
+131
+108
+87
+70
+58
+53
+52
+51
+50
+49
+49
+49
+49
+50
+51
+52
+53
+53
+53
+53
+52
+51
+50
+49
+49
+49
+49
+49
+49
+49
+49
+49
+49
+49
+49
+49
+49
+49
+49
+49
+49
+49
+48
+47
+47
+46
+46
+46
+46
+46
+47
+47
+48
+48
+49
+50
+51
+51
+52
+52
+53
+53
+52
+52
+50
+48
+46
+45
+44
+43
+43
+44
+44
+46
+47
+50
+51
+51
+52
+52
+53
+54
+57
+59
+62
+66
+75
+91
+114
+140
+159
+161
+159
+153
+142
+127
+101
+61
+23
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+93
+94
+94
+95
+97
+102
+104
+106
+107
+108
+109
+108
+104
+101
+102
+101
+84
+51
+18
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+16
+51
+81
+100
+103
+102
+92
+82
+74
+69
+72
+87
+113
+144
+176
+198
+200
+199
+196
+192
+186
+179
+171
+160
+145
+115
+92
+74
+62
+55
+52
+51
+50
+50
+49
+49
+49
+50
+50
+52
+53
+53
+53
+53
+53
+51
+50
+50
+49
+49
+49
+49
+49
+49
+49
+49
+49
+49
+49
+49
+49
+49
+49
+49
+48
+47
+46
+46
+45
+44
+44
+44
+44
+44
+45
+45
+46
+47
+48
+48
+50
+50
+51
+52
+52
+53
+53
+54
+53
+53
+51
+50
+48
+46
+44
+43
+43
+43
+44
+45
+47
+49
+50
+51
+52
+52
+53
+54
+56
+59
+62
+66
+74
+89
+112
+145
+156
+160
+159
+152
+136
+122
+92
+53
+15
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+93
+94
+94
+96
+98
+103
+105
+107
+107
+108
+109
+109
+106
+103
+101
+102
+96
+68
+32
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+25
+63
+88
+102
+103
+99
+88
+78
+72
+69
+75
+97
+127
+160
+188
+202
+200
+198
+194
+189
+181
+174
+164
+150
+131
+99
+79
+65
+56
+53
+51
+51
+50
+49
+49
+49
+49
+50
+51
+53
+53
+54
+53
+53
+52
+51
+50
+49
+49
+49
+49
+49
+49
+49
+49
+49
+49
+49
+49
+49
+49
+49
+48
+48
+46
+45
+44
+43
+43
+43
+43
+43
+43
+44
+44
+45
+46
+46
+47
+48
+49
+50
+51
+52
+52
+53
+54
+54
+54
+54
+54
+53
+51
+49
+47
+44
+44
+43
+43
+44
+45
+47
+49
+50
+51
+52
+52
+52
+54
+56
+60
+62
+66
+72
+85
+120
+143
+156
+161
+160
+146
+135
+116
+86
+38
+5
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+92
+93
+94
+96
+100
+105
+106
+107
+108
+108
+109
+109
+108
+106
+101
+102
+101
+83
+52
+12
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+5
+33
+74
+95
+102
+103
+95
+83
+75
+70
+69
+80
+109
+143
+174
+197
+203
+199
+195
+191
+185
+177
+168
+155
+138
+116
+84
+68
+58
+54
+52
+51
+50
+49
+49
+49
+49
+50
+51
+52
+53
+54
+54
+53
+52
+51
+50
+49
+49
+49
+49
+49
+49
+49
+49
+49
+49
+49
+50
+50
+50
+49
+48
+47
+45
+43
+42
+42
+42
+42
+42
+43
+43
+43
+44
+44
+45
+46
+47
+47
+48
+49
+50
+51
+52
+52
+53
+54
+54
+54
+55
+55
+55
+54
+53
+51
+47
+45
+44
+43
+43
+43
+44
+46
+48
+50
+52
+52
+52
+52
+53
+56
+60
+62
+65
+69
+88
+119
+143
+158
+162
+158
+144
+132
+112
+77
+15
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+92
+93
+95
+97
+102
+106
+107
+107
+107
+108
+108
+109
+109
+108
+103
+102
+102
+96
+77
+35
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+8
+49
+83
+98
+101
+101
+90
+79
+73
+70
+71
+91
+128
+162
+188
+201
+202
+196
+192
+187
+180
+170
+158
+142
+121
+96
+69
+59
+54
+52
+51
+50
+49
+48
+48
+48
+49
+51
+52
+53
+54
+54
+53
+53
+52
+50
+49
+49
+49
+49
+49
+49
+49
+49
+49
+49
+50
+50
+50
+50
+49
+47
+44
+43
+42
+41
+42
+42
+42
+43
+43
+44
+45
+46
+47
+47
+48
+49
+49
+49
+50
+50
+51
+51
+52
+52
+53
+54
+54
+54
+55
+55
+55
+55
+55
+54
+52
+50
+47
+45
+43
+43
+43
+44
+45
+47
+50
+51
+52
+52
+52
+53
+55
+58
+62
+64
+69
+83
+109
+137
+157
+161
+157
+145
+131
+118
+57
+20
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+92
+94
+96
+99
+103
+107
+107
+107
+107
+107
+107
+108
+109
+108
+106
+102
+102
+100
+86
+54
+10
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+4
+13
+60
+88
+99
+101
+100
+85
+76
+71
+70
+73
+102
+142
+174
+195
+202
+201
+194
+189
+183
+175
+164
+150
+130
+107
+83
+62
+56
+53
+52
+51
+49
+48
+48
+48
+49
+50
+52
+53
+54
+54
+54
+53
+52
+51
+50
+49
+49
+49
+49
+49
+49
+49
+49
+49
+50
+50
+50
+49
+48
+46
+43
+42
+41
+41
+41
+42
+43
+44
+45
+46
+47
+48
+48
+49
+49
+50
+50
+50
+50
+50
+51
+51
+52
+52
+53
+53
+54
+54
+55
+55
+55
+55
+55
+55
+55
+54
+52
+50
+48
+46
+44
+43
+43
+44
+45
+48
+50
+51
+52
+52
+53
+54
+55
+58
+62
+66
+72
+86
+108
+138
+159
+159
+154
+143
+127
+94
+46
+16
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+92
+94
+96
+100
+104
+107
+107
+107
+107
+106
+106
+107
+108
+109
+108
+103
+103
+102
+94
+73
+17
+6
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+6
+19
+69
+91
+100
+100
+98
+82
+74
+70
+71
+77
+115
+155
+183
+199
+202
+199
+191
+186
+180
+171
+157
+140
+118
+94
+73
+57
+54
+52
+51
+50
+49
+48
+48
+48
+49
+51
+52
+53
+54
+54
+54
+53
+52
+51
+50
+49
+49
+49
+49
+49
+49
+49
+49
+50
+50
+50
+49
+48
+46
+43
+41
+41
+41
+41
+42
+44
+45
+46
+47
+48
+49
+49
+50
+50
+50
+50
+50
+50
+50
+50
+51
+51
+51
+52
+52
+53
+54
+54
+55
+55
+55
+55
+55
+55
+55
+55
+54
+52
+50
+48
+45
+44
+43
+43
+44
+45
+48
+50
+51
+52
+53
+53
+54
+56
+58
+63
+66
+73
+87
+111
+146
+157
+158
+152
+140
+116
+75
+37
+9
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+92
+94
+97
+101
+105
+107
+107
+107
+107
+106
+105
+106
+107
+109
+109
+104
+103
+102
+99
+88
+29
+9
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+8
+25
+77
+94
+100
+99
+95
+78
+72
+69
+72
+82
+128
+167
+190
+201
+202
+196
+188
+182
+176
+166
+150
+129
+106
+83
+64
+54
+53
+51
+50
+49
+48
+48
+48
+49
+50
+51
+53
+53
+54
+54
+53
+52
+51
+50
+50
+49
+49
+49
+49
+49
+49
+49
+50
+50
+50
+50
+48
+46
+43
+41
+40
+41
+42
+43
+44
+46
+48
+48
+49
+49
+50
+50
+50
+50
+50
+50
+50
+50
+50
+50
+50
+50
+51
+51
+51
+52
+53
+54
+54
+55
+55
+55
+55
+55
+55
+55
+55
+54
+53
+51
+47
+45
+44
+43
+43
+44
+46
+48
+50
+52
+53
+53
+53
+54
+56
+60
+63
+67
+73
+85
+124
+147
+157
+158
+152
+130
+103
+62
+24
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+93
+95
+98
+102
+106
+107
+107
+107
+106
+105
+104
+105
+106
+108
+109
+105
+103
+103
+101
+97
+46
+16
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+11
+32
+84
+96
+100
+98
+93
+75
+70
+68
+73
+89
+141
+177
+196
+202
+201
+193
+186
+179
+172
+162
+141
+118
+94
+73
+59
+53
+52
+51
+50
+48
+48
+48
+48
+49
+50
+52
+53
+53
+54
+54
+53
+52
+51
+50
+50
+50
+49
+49
+49
+49
+49
+50
+50
+50
+50
+49
+46
+43
+41
+40
+40
+41
+43
+45
+47
+48
+49
+49
+49
+50
+50
+50
+50
+50
+50
+51
+51
+51
+50
+50
+50
+50
+49
+49
+49
+50
+51
+53
+53
+54
+55
+55
+55
+55
+55
+55
+55
+55
+54
+53
+50
+47
+45
+44
+43
+43
+44
+46
+48
+50
+52
+53
+53
+54
+54
+57
+61
+64
+67
+71
+93
+127
+149
+160
+160
+142
+126
+90
+47
+10
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+93
+95
+98
+103
+107
+107
+107
+106
+106
+105
+103
+104
+105
+106
+109
+107
+104
+103
+102
+101
+65
+27
+8
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+15
+42
+90
+97
+100
+97
+88
+72
+69
+69
+78
+100
+157
+186
+199
+202
+201
+189
+182
+175
+166
+154
+128
+103
+81
+64
+55
+52
+51
+50
+49
+48
+48
+48
+49
+49
+51
+53
+53
+53
+53
+53
+53
+51
+50
+50
+50
+50
+50
+49
+49
+50
+50
+50
+50
+50
+50
+46
+42
+40
+40
+40
+42
+44
+46
+48
+48
+49
+49
+49
+50
+50
+51
+52
+53
+54
+55
+56
+56
+55
+54
+53
+51
+50
+49
+49
+48
+47
+47
+48
+50
+51
+53
+54
+54
+55
+55
+55
+55
+55
+55
+54
+52
+50
+48
+46
+44
+43
+44
+44
+46
+48
+51
+52
+53
+53
+54
+55
+58
+61
+64
+67
+73
+92
+122
+149
+161
+159
+140
+120
+88
+35
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+94
+95
+99
+103
+107
+107
+107
+106
+105
+104
+103
+103
+104
+105
+108
+107
+104
+103
+102
+102
+78
+34
+11
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+5
+19
+49
+93
+98
+99
+95
+85
+70
+68
+70
+82
+109
+167
+190
+200
+201
+199
+186
+179
+171
+161
+147
+118
+93
+73
+59
+54
+52
+51
+50
+48
+48
+48
+48
+49
+50
+51
+53
+53
+53
+53
+53
+52
+51
+50
+50
+50
+50
+50
+50
+50
+50
+50
+50
+50
+50
+48
+42
+40
+40
+40
+41
+44
+46
+47
+48
+48
+49
+49
+50
+51
+53
+58
+62
+67
+71
+74
+77
+77
+76
+74
+71
+65
+60
+56
+52
+49
+47
+47
+47
+47
+48
+50
+51
+53
+54
+54
+55
+55
+55
+55
+54
+53
+52
+50
+47
+45
+44
+44
+44
+45
+46
+49
+51
+52
+53
+54
+55
+57
+59
+62
+65
+69
+78
+99
+126
+154
+161
+153
+136
+108
+68
+15
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+94
+95
+99
+103
+107
+107
+107
+106
+105
+103
+103
+103
+103
+105
+108
+108
+104
+103
+103
+102
+87
+42
+15
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+7
+23
+55
+94
+98
+98
+94
+83
+69
+68
+72
+87
+118
+175
+194
+201
+201
+197
+183
+176
+168
+156
+139
+108
+85
+67
+56
+53
+51
+50
+49
+48
+48
+48
+48
+49
+50
+51
+53
+53
+53
+53
+53
+52
+51
+50
+50
+50
+50
+50
+50
+50
+50
+50
+50
+50
+49
+45
+40
+39
+39
+40
+42
+46
+47
+48
+48
+48
+49
+51
+53
+58
+64
+73
+80
+86
+91
+96
+100
+101
+101
+100
+97
+91
+84
+76
+69
+61
+54
+50
+48
+46
+47
+48
+49
+51
+52
+53
+54
+54
+54
+54
+54
+54
+53
+51
+49
+47
+45
+44
+44
+44
+45
+48
+50
+52
+53
+53
+54
+56
+58
+60
+63
+67
+71
+82
+103
+134
+160
+159
+147
+127
+99
+34
+12
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+94
+96
+99
+104
+107
+107
+107
+106
+104
+103
+102
+102
+103
+104
+108
+108
+104
+103
+103
+102
+93
+50
+20
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+3
+5
+6
+7
+7
+6
+5
+3
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+8
+26
+61
+95
+98
+98
+93
+81
+69
+68
+73
+91
+126
+183
+196
+201
+200
+195
+181
+173
+164
+151
+131
+99
+77
+62
+55
+53
+51
+50
+49
+48
+48
+48
+49
+49
+50
+51
+52
+53
+53
+53
+53
+51
+50
+50
+50
+50
+50
+50
+50
+50
+50
+50
+50
+49
+47
+42
+39
+39
+40
+41
+44
+47
+47
+48
+48
+48
+50
+54
+60
+68
+77
+88
+96
+102
+108
+112
+117
+119
+121
+121
+121
+117
+111
+103
+94
+83
+69
+61
+54
+50
+47
+47
+48
+49
+50
+52
+53
+53
+54
+54
+54
+54
+53
+52
+50
+48
+46
+44
+44
+44
+44
+46
+49
+51
+52
+53
+54
+55
+57
+59
+62
+66
+68
+72
+84
+108
+150
+159
+155
+142
+122
+61
+25
+7
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+94
+96
+99
+104
+107
+107
+107
+106
+104
+103
+102
+102
+102
+104
+108
+108
+105
+103
+103
+103
+97
+58
+25
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+3
+4
+5
+6
+6
+6
+6
+5
+5
+4
+4
+4
+6
+8
+14
+18
+21
+21
+19
+14
+9
+5
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+10
+29
+67
+96
+98
+97
+91
+79
+68
+68
+75
+95
+134
+189
+198
+202
+199
+192
+179
+170
+160
+145
+123
+90
+70
+59
+54
+52
+51
+49
+48
+48
+48
+48
+49
+50
+50
+51
+52
+52
+53
+53
+52
+51
+50
+50
+50
+50
+50
+50
+50
+50
+50
+50
+50
+48
+45
+40
+39
+39
+40
+43
+46
+47
+47
+47
+48
+49
+54
+62
+71
+82
+90
+98
+103
+108
+112
+116
+120
+123
+125
+127
+129
+131
+131
+129
+124
+114
+96
+82
+69
+58
+50
+47
+47
+47
+48
+50
+52
+52
+53
+53
+54
+54
+53
+53
+51
+50
+47
+45
+44
+44
+44
+45
+47
+50
+52
+53
+54
+54
+56
+58
+61
+65
+68
+70
+74
+82
+127
+153
+161
+154
+134
+93
+44
+15
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+94
+96
+99
+103
+107
+107
+107
+106
+104
+102
+102
+102
+102
+104
+108
+108
+105
+103
+103
+103
+100
+65
+30
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+5
+9
+14
+23
+30
+36
+41
+44
+45
+44
+41
+37
+33
+28
+27
+28
+32
+41
+57
+69
+76
+79
+79
+71
+57
+41
+25
+12
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+12
+34
+74
+97
+98
+96
+90
+77
+68
+68
+76
+99
+143
+193
+200
+202
+198
+189
+176
+167
+154
+137
+113
+80
+64
+56
+53
+52
+50
+49
+48
+48
+48
+48
+49
+50
+51
+51
+52
+52
+52
+52
+52
+51
+50
+50
+50
+50
+50
+50
+50
+50
+50
+51
+49
+46
+42
+39
+38
+39
+42
+45
+46
+47
+47
+47
+49
+53
+63
+73
+81
+87
+92
+99
+103
+107
+109
+112
+115
+118
+121
+125
+128
+132
+133
+134
+134
+134
+130
+119
+104
+88
+71
+56
+50
+48
+47
+48
+50
+51
+52
+53
+53
+53
+53
+53
+52
+51
+49
+47
+45
+44
+43
+44
+46
+48
+50
+53
+54
+54
+55
+57
+59
+65
+67
+69
+70
+73
+90
+129
+152
+160
+156
+125
+77
+37
+10
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+94
+95
+99
+103
+107
+107
+107
+106
+105
+103
+102
+102
+103
+105
+108
+108
+104
+102
+102
+103
+101
+69
+33
+6
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+3
+10
+20
+32
+44
+55
+65
+70
+74
+77
+79
+80
+79
+78
+76
+73
+69
+65
+64
+67
+73
+85
+91
+95
+97
+98
+96
+90
+82
+70
+53
+25
+12
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+14
+38
+78
+97
+98
+96
+89
+76
+67
+68
+77
+102
+149
+195
+200
+202
+197
+187
+174
+164
+150
+131
+106
+74
+61
+54
+52
+52
+50
+48
+48
+48
+48
+48
+49
+50
+50
+51
+51
+52
+52
+52
+52
+51
+50
+50
+50
+50
+50
+50
+50
+50
+51
+50
+48
+44
+40
+38
+38
+40
+43
+46
+46
+46
+47
+48
+51
+57
+68
+75
+81
+87
+90
+92
+91
+89
+87
+86
+86
+89
+93
+98
+105
+116
+123
+129
+133
+135
+135
+132
+126
+116
+100
+76
+63
+54
+49
+47
+48
+50
+51
+52
+52
+53
+53
+53
+52
+52
+50
+48
+46
+45
+44
+44
+45
+47
+49
+52
+54
+54
+55
+56
+58
+63
+67
+69
+70
+72
+79
+105
+135
+158
+161
+138
+104
+61
+23
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+94
+95
+98
+103
+107
+107
+107
+107
+105
+103
+103
+102
+104
+106
+109
+108
+103
+102
+102
+104
+102
+72
+35
+7
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+5
+12
+23
+41
+53
+64
+73
+80
+86
+88
+90
+92
+93
+94
+94
+93
+93
+92
+90
+88
+88
+89
+92
+98
+101
+103
+105
+105
+105
+104
+101
+95
+85
+64
+43
+23
+9
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+4
+16
+42
+81
+97
+98
+96
+88
+75
+67
+68
+78
+104
+152
+196
+201
+202
+197
+185
+172
+162
+146
+125
+99
+69
+59
+54
+52
+51
+49
+48
+48
+48
+48
+49
+49
+50
+50
+51
+51
+51
+52
+51
+51
+51
+50
+50
+50
+50
+50
+50
+50
+51
+51
+50
+47
+43
+39
+38
+38
+41
+44
+46
+46
+46
+46
+49
+53
+60
+70
+75
+79
+81
+80
+75
+70
+67
+64
+62
+62
+64
+66
+70
+75
+86
+96
+106
+117
+127
+135
+137
+136
+132
+124
+103
+84
+68
+57
+50
+48
+49
+50
+51
+52
+53
+53
+53
+52
+52
+50
+49
+47
+45
+44
+44
+44
+46
+48
+51
+53
+54
+54
+55
+57
+61
+67
+70
+71
+72
+74
+87
+115
+145
+162
+152
+125
+85
+42
+11
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+93
+95
+98
+102
+107
+107
+107
+107
+106
+104
+103
+103
+105
+107
+109
+108
+103
+101
+102
+104
+103
+74
+37
+7
+2
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+4
+11
+22
+36
+53
+74
+83
+88
+90
+91
+91
+91
+91
+92
+93
+94
+95
+96
+96
+97
+99
+99
+99
+100
+101
+103
+104
+105
+105
+106
+106
+106
+105
+105
+104
+97
+79
+54
+29
+9
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+4
+19
+45
+84
+98
+98
+95
+88
+74
+67
+68
+79
+106
+155
+197
+202
+202
+196
+183
+170
+159
+142
+120
+93
+65
+57
+53
+52
+51
+49
+48
+48
+48
+48
+49
+49
+50
+50
+51
+51
+51
+51
+51
+51
+51
+50
+50
+50
+50
+50
+50
+50
+51
+51
+50
+46
+41
+38
+37
+39
+42
+45
+46
+46
+46
+47
+49
+55
+61
+69
+73
+73
+71
+65
+56
+52
+49
+47
+47
+47
+47
+48
+49
+51
+57
+65
+76
+90
+105
+123
+131
+136
+139
+139
+128
+110
+90
+71
+57
+49
+49
+49
+50
+51
+52
+52
+53
+52
+52
+51
+49
+48
+46
+45
+44
+44
+45
+47
+50
+53
+54
+54
+55
+56
+60
+66
+70
+73
+73
+73
+76
+95
+125
+157
+162
+142
+107
+66
+23
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+93
+95
+97
+101
+106
+107
+107
+108
+107
+105
+104
+105
+107
+109
+109
+106
+101
+101
+102
+105
+103
+75
+38
+8
+3
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+13
+34
+57
+77
+87
+90
+91
+92
+91
+90
+86
+84
+84
+83
+84
+87
+90
+93
+95
+98
+100
+101
+102
+103
+103
+104
+105
+105
+105
+105
+105
+105
+106
+106
+106
+105
+103
+93
+69
+28
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+4
+21
+48
+85
+98
+98
+95
+88
+74
+67
+67
+79
+107
+156
+198
+202
+201
+195
+182
+168
+157
+138
+115
+88
+62
+56
+53
+52
+51
+49
+48
+48
+48
+48
+49
+49
+50
+50
+50
+51
+51
+51
+51
+51
+51
+50
+50
+50
+50
+50
+50
+51
+51
+51
+49
+44
+40
+38
+37
+39
+43
+45
+46
+46
+46
+47
+50
+55
+61
+67
+67
+64
+57
+48
+45
+44
+44
+43
+43
+44
+44
+44
+44
+45
+45
+47
+50
+55
+66
+92
+114
+129
+139
+142
+142
+135
+118
+95
+71
+53
+50
+49
+49
+50
+52
+52
+52
+52
+52
+51
+50
+49
+47
+45
+44
+44
+45
+46
+49
+53
+54
+54
+55
+56
+59
+64
+70
+74
+76
+74
+74
+80
+101
+144
+164
+152
+128
+92
+41
+7
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+92
+95
+97
+100
+106
+107
+107
+108
+108
+108
+107
+108
+108
+109
+109
+103
+100
+100
+102
+105
+102
+73
+37
+9
+6
+7
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+4
+13
+31
+68
+82
+88
+90
+91
+88
+82
+75
+70
+65
+62
+61
+61
+62
+64
+68
+73
+79
+86
+93
+100
+102
+103
+104
+104
+104
+103
+103
+103
+102
+102
+102
+102
+103
+104
+105
+105
+104
+100
+90
+30
+10
+2
+1
+1
+3
+3
+2
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+5
+23
+51
+85
+98
+98
+95
+88
+75
+67
+67
+79
+107
+156
+198
+202
+201
+195
+181
+165
+153
+134
+109
+83
+59
+55
+52
+51
+50
+48
+48
+48
+48
+48
+49
+50
+50
+50
+50
+50
+51
+51
+51
+51
+51
+51
+50
+50
+50
+50
+51
+51
+51
+51
+49
+43
+39
+37
+37
+40
+44
+45
+45
+45
+45
+46
+50
+54
+59
+59
+57
+51
+46
+44
+43
+43
+43
+43
+43
+43
+43
+43
+44
+44
+44
+44
+44
+45
+46
+51
+64
+85
+110
+133
+143
+145
+142
+131
+108
+73
+59
+52
+49
+50
+51
+52
+52
+52
+52
+52
+51
+49
+48
+46
+45
+44
+44
+45
+47
+51
+53
+54
+55
+55
+58
+62
+69
+75
+80
+79
+76
+76
+83
+103
+158
+163
+151
+121
+75
+20
+7
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+92
+94
+96
+99
+106
+107
+107
+108
+108
+108
+109
+109
+109
+109
+108
+101
+100
+100
+102
+105
+101
+69
+36
+12
+9
+9
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+11
+29
+50
+69
+82
+87
+88
+86
+82
+74
+69
+65
+62
+60
+58
+57
+58
+59
+61
+65
+70
+77
+85
+93
+100
+101
+102
+102
+102
+103
+102
+102
+102
+102
+101
+100
+99
+99
+99
+101
+102
+103
+103
+100
+73
+34
+12
+2
+1
+2
+7
+9
+8
+5
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+5
+24
+52
+85
+98
+98
+95
+88
+75
+67
+68
+78
+106
+156
+198
+202
+201
+194
+180
+164
+151
+131
+105
+79
+58
+54
+52
+51
+50
+48
+48
+48
+48
+49
+49
+50
+50
+50
+50
+50
+50
+51
+51
+51
+51
+51
+51
+51
+51
+51
+51
+51
+51
+51
+48
+42
+38
+37
+37
+41
+44
+45
+45
+45
+45
+46
+49
+53
+55
+55
+51
+47
+44
+43
+43
+43
+43
+43
+43
+43
+43
+43
+43
+44
+44
+44
+44
+44
+44
+46
+50
+59
+74
+97
+130
+141
+145
+142
+133
+101
+76
+61
+52
+50
+50
+51
+52
+52
+52
+52
+51
+50
+49
+47
+45
+44
+44
+45
+46
+51
+53
+54
+55
+55
+57
+61
+67
+73
+81
+83
+80
+77
+78
+85
+140
+159
+156
+136
+103
+38
+14
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+91
+94
+96
+98
+105
+107
+107
+107
+108
+109
+109
+109
+109
+108
+106
+100
+99
+100
+102
+104
+99
+65
+35
+15
+13
+12
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+20
+39
+57
+73
+84
+86
+85
+82
+78
+73
+66
+63
+60
+58
+57
+56
+56
+57
+58
+60
+64
+70
+77
+85
+94
+100
+101
+101
+102
+102
+102
+102
+101
+100
+98
+97
+96
+95
+95
+95
+96
+97
+99
+101
+103
+95
+66
+36
+11
+3
+3
+8
+15
+20
+19
+12
+5
+2
+1
+1
+1
+1
+1
+1
+1
+1
+5
+24
+52
+85
+98
+98
+95
+88
+76
+67
+68
+77
+103
+154
+198
+202
+201
+194
+180
+164
+150
+128
+103
+76
+57
+54
+52
+51
+50
+48
+48
+48
+48
+49
+49
+50
+50
+50
+50
+50
+50
+50
+51
+51
+51
+51
+51
+51
+51
+51
+51
+51
+51
+51
+48
+41
+38
+37
+37
+41
+44
+45
+45
+45
+45
+45
+48
+50
+51
+51
+47
+45
+43
+43
+43
+43
+43
+43
+43
+43
+43
+43
+43
+43
+43
+43
+43
+43
+43
+43
+44
+47
+54
+67
+101
+125
+139
+146
+145
+126
+99
+76
+59
+52
+50
+51
+51
+52
+52
+52
+52
+51
+49
+48
+45
+45
+44
+45
+46
+50
+53
+54
+55
+55
+56
+60
+65
+72
+81
+86
+84
+81
+78
+77
+113
+148
+159
+150
+127
+61
+26
+8
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+89
+93
+95
+97
+104
+106
+106
+107
+108
+109
+109
+109
+108
+106
+103
+99
+98
+100
+103
+104
+96
+60
+33
+18
+17
+13
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+8
+19
+47
+69
+79
+82
+83
+82
+79
+74
+70
+67
+63
+61
+59
+58
+57
+56
+56
+56
+58
+60
+65
+71
+78
+87
+95
+101
+101
+102
+102
+103
+102
+100
+97
+95
+93
+91
+90
+90
+91
+92
+93
+93
+95
+97
+101
+102
+93
+66
+34
+11
+5
+7
+17
+29
+36
+29
+17
+8
+3
+1
+1
+1
+1
+1
+1
+1
+5
+23
+52
+85
+98
+98
+95
+89
+76
+67
+68
+76
+100
+151
+198
+202
+202
+194
+180
+163
+149
+126
+100
+74
+56
+53
+52
+51
+50
+48
+48
+48
+49
+49
+50
+50
+50
+50
+50
+50
+50
+50
+50
+51
+51
+51
+51
+51
+51
+51
+51
+51
+51
+51
+48
+41
+38
+37
+37
+41
+43
+44
+44
+44
+44
+45
+47
+48
+49
+48
+45
+44
+43
+43
+43
+43
+43
+43
+43
+43
+43
+43
+43
+43
+43
+43
+43
+43
+43
+43
+43
+43
+45
+48
+68
+99
+124
+141
+148
+144
+123
+97
+72
+56
+51
+51
+51
+52
+52
+52
+52
+51
+50
+48
+46
+45
+45
+45
+45
+49
+52
+54
+55
+55
+56
+59
+65
+72
+81
+88
+88
+85
+81
+76
+88
+132
+156
+161
+145
+86
+42
+15
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+88
+93
+95
+97
+102
+106
+106
+106
+106
+108
+108
+108
+107
+104
+99
+97
+97
+100
+103
+104
+93
+55
+32
+22
+20
+11
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+8
+24
+56
+77
+81
+82
+81
+78
+72
+70
+68
+66
+64
+63
+61
+59
+58
+57
+56
+56
+57
+59
+62
+67
+72
+79
+88
+96
+103
+105
+105
+104
+103
+99
+94
+90
+87
+85
+84
+84
+85
+87
+90
+92
+92
+93
+93
+95
+101
+102
+97
+76
+32
+10
+11
+15
+26
+50
+53
+40
+22
+7
+2
+1
+1
+1
+1
+1
+1
+4
+22
+50
+83
+98
+98
+96
+89
+77
+67
+67
+74
+97
+146
+198
+203
+202
+195
+180
+163
+148
+125
+99
+73
+56
+53
+52
+51
+50
+48
+48
+48
+49
+49
+50
+50
+50
+50
+50
+50
+50
+50
+50
+50
+51
+51
+51
+51
+51
+51
+51
+51
+51
+51
+48
+41
+38
+36
+37
+41
+43
+44
+44
+44
+44
+44
+45
+47
+47
+46
+44
+44
+43
+43
+43
+43
+43
+43
+43
+43
+43
+43
+43
+43
+42
+42
+42
+42
+42
+42
+42
+42
+43
+43
+47
+67
+97
+127
+145
+149
+142
+120
+92
+65
+52
+51
+51
+51
+52
+52
+52
+51
+50
+49
+46
+45
+45
+45
+45
+48
+51
+54
+55
+55
+56
+58
+64
+71
+79
+90
+91
+89
+85
+79
+77
+115
+148
+165
+157
+113
+61
+26
+6
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+85
+92
+94
+96
+100
+106
+106
+106
+105
+105
+106
+106
+104
+100
+96
+96
+97
+100
+103
+103
+84
+50
+32
+25
+22
+8
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+18
+46
+72
+80
+79
+75
+73
+72
+71
+69
+68
+67
+66
+65
+64
+63
+61
+59
+57
+56
+56
+59
+62
+66
+70
+78
+89
+99
+106
+107
+106
+104
+100
+95
+86
+83
+81
+80
+80
+80
+81
+83
+86
+89
+91
+92
+92
+92
+93
+94
+100
+102
+101
+96
+53
+30
+23
+26
+32
+64
+66
+58
+39
+12
+2
+1
+1
+1
+1
+1
+3
+18
+44
+79
+97
+98
+96
+91
+79
+67
+67
+72
+91
+136
+195
+202
+202
+196
+182
+164
+147
+124
+98
+71
+55
+53
+52
+51
+49
+49
+48
+49
+49
+49
+50
+50
+50
+50
+50
+50
+50
+50
+50
+50
+51
+51
+51
+51
+51
+51
+51
+51
+51
+51
+48
+42
+38
+36
+36
+40
+42
+44
+44
+44
+44
+44
+44
+45
+45
+45
+44
+44
+44
+44
+44
+44
+44
+44
+43
+43
+43
+42
+42
+42
+42
+42
+41
+40
+40
+39
+40
+40
+41
+42
+43
+46
+63
+91
+128
+147
+148
+141
+123
+90
+59
+53
+51
+51
+52
+52
+52
+52
+51
+49
+47
+46
+45
+45
+45
+47
+51
+53
+55
+55
+56
+57
+63
+70
+77
+90
+93
+94
+92
+85
+76
+87
+123
+157
+164
+142
+92
+48
+16
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+83
+92
+94
+95
+98
+106
+106
+106
+104
+103
+103
+103
+100
+97
+96
+95
+98
+101
+103
+102
+76
+46
+32
+26
+21
+5
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+24
+52
+69
+76
+76
+74
+73
+72
+72
+73
+71
+69
+68
+67
+67
+66
+64
+61
+59
+57
+57
+58
+62
+66
+70
+80
+92
+100
+105
+107
+106
+103
+97
+91
+85
+80
+78
+76
+75
+74
+75
+77
+80
+83
+87
+91
+92
+92
+92
+93
+94
+96
+99
+101
+101
+89
+71
+51
+36
+37
+51
+65
+67
+59
+40
+9
+3
+1
+1
+1
+1
+2
+15
+39
+75
+97
+98
+97
+92
+81
+68
+67
+70
+87
+127
+191
+202
+203
+197
+183
+165
+148
+125
+98
+71
+55
+53
+52
+51
+49
+49
+48
+49
+49
+50
+50
+50
+50
+50
+50
+50
+50
+50
+50
+50
+51
+51
+51
+51
+51
+51
+51
+51
+51
+51
+49
+42
+38
+36
+36
+39
+42
+43
+44
+43
+43
+43
+44
+44
+45
+45
+45
+44
+44
+44
+44
+44
+44
+44
+43
+43
+42
+42
+42
+41
+41
+41
+40
+39
+38
+37
+37
+38
+39
+41
+42
+44
+51
+68
+101
+139
+146
+146
+136
+113
+72
+59
+53
+52
+52
+52
+52
+52
+51
+50
+48
+46
+45
+45
+45
+47
+50
+53
+55
+55
+56
+57
+62
+70
+77
+89
+94
+97
+95
+91
+79
+80
+108
+142
+165
+155
+115
+69
+28
+6
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+81
+91
+94
+95
+97
+105
+106
+106
+105
+102
+101
+100
+98
+96
+95
+96
+99
+101
+102
+99
+67
+44
+32
+26
+17
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+6
+18
+52
+70
+75
+75
+73
+74
+77
+77
+76
+75
+73
+70
+69
+69
+68
+66
+64
+61
+59
+58
+59
+62
+67
+72
+78
+90
+100
+105
+107
+106
+102
+96
+89
+83
+78
+73
+71
+69
+68
+68
+70
+72
+76
+80
+84
+90
+91
+92
+92
+93
+94
+95
+96
+99
+101
+101
+93
+79
+64
+51
+50
+61
+68
+68
+60
+28
+11
+3
+1
+1
+1
+2
+11
+32
+69
+95
+97
+97
+93
+83
+68
+67
+69
+83
+117
+186
+200
+204
+198
+185
+166
+149
+126
+99
+72
+55
+53
+51
+51
+49
+49
+49
+49
+49
+50
+50
+50
+50
+50
+50
+50
+50
+50
+50
+50
+51
+51
+51
+51
+51
+51
+51
+51
+51
+51
+50
+43
+39
+36
+36
+38
+41
+42
+43
+43
+43
+43
+43
+44
+44
+45
+44
+44
+44
+44
+44
+44
+44
+43
+43
+42
+42
+41
+40
+40
+40
+40
+39
+38
+37
+36
+35
+35
+36
+38
+41
+42
+45
+54
+75
+124
+141
+147
+143
+131
+89
+67
+56
+52
+52
+52
+52
+52
+52
+51
+48
+47
+45
+45
+45
+46
+50
+53
+55
+56
+56
+57
+62
+69
+77
+87
+95
+98
+98
+96
+84
+79
+94
+123
+161
+161
+135
+90
+44
+12
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+79
+90
+94
+94
+95
+104
+105
+106
+105
+102
+99
+98
+97
+96
+96
+97
+100
+101
+100
+93
+59
+41
+31
+24
+12
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+6
+18
+42
+74
+75
+74
+72
+75
+80
+84
+85
+82
+76
+73
+71
+70
+69
+68
+66
+64
+61
+60
+60
+63
+67
+72
+78
+86
+99
+104
+106
+105
+103
+95
+87
+81
+75
+71
+66
+63
+62
+62
+63
+65
+68
+72
+76
+81
+88
+90
+92
+92
+93
+95
+95
+95
+96
+98
+100
+100
+98
+90
+71
+60
+60
+66
+71
+72
+51
+25
+9
+3
+1
+1
+1
+8
+26
+61
+94
+97
+97
+94
+86
+70
+67
+68
+79
+107
+179
+198
+204
+199
+187
+167
+150
+127
+100
+73
+55
+53
+51
+51
+49
+49
+49
+49
+49
+50
+50
+50
+50
+50
+50
+50
+50
+50
+50
+50
+50
+51
+51
+51
+51
+51
+51
+51
+51
+51
+50
+45
+40
+37
+36
+37
+39
+41
+42
+43
+43
+43
+43
+43
+44
+44
+44
+44
+44
+44
+44
+44
+43
+43
+42
+41
+40
+40
+40
+39
+39
+39
+38
+38
+37
+34
+33
+33
+33
+35
+40
+41
+43
+46
+55
+103
+132
+144
+147
+143
+108
+78
+61
+53
+52
+52
+52
+52
+52
+51
+49
+47
+46
+45
+45
+46
+49
+53
+55
+56
+56
+57
+61
+68
+77
+86
+94
+99
+100
+100
+90
+81
+84
+106
+153
+164
+150
+111
+64
+21
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+77
+90
+94
+94
+94
+102
+105
+106
+105
+102
+99
+97
+96
+96
+96
+98
+100
+101
+97
+86
+50
+37
+29
+20
+7
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+16
+39
+71
+76
+72
+70
+74
+84
+92
+92
+90
+86
+77
+73
+71
+70
+70
+68
+66
+64
+63
+62
+62
+66
+70
+77
+85
+94
+104
+105
+105
+103
+96
+84
+78
+72
+67
+61
+58
+58
+59
+60
+61
+62
+64
+67
+72
+77
+85
+89
+91
+92
+93
+95
+96
+96
+95
+94
+94
+95
+95
+94
+93
+77
+69
+67
+71
+76
+73
+46
+22
+6
+2
+1
+1
+5
+19
+52
+91
+96
+97
+95
+89
+72
+67
+67
+75
+96
+170
+196
+205
+201
+190
+170
+152
+129
+102
+75
+55
+53
+51
+51
+49
+49
+49
+49
+49
+50
+50
+50
+50
+50
+50
+50
+49
+49
+50
+50
+50
+51
+51
+51
+51
+51
+51
+51
+51
+51
+51
+46
+41
+37
+36
+37
+38
+40
+41
+42
+43
+43
+43
+43
+43
+43
+44
+44
+44
+44
+44
+43
+42
+41
+40
+40
+40
+39
+39
+39
+39
+38
+38
+37
+36
+33
+32
+31
+31
+32
+37
+40
+42
+44
+46
+78
+119
+140
+147
+147
+126
+91
+68
+55
+52
+52
+52
+52
+52
+52
+49
+47
+46
+45
+45
+46
+49
+52
+55
+56
+56
+57
+61
+67
+77
+86
+93
+99
+102
+102
+96
+84
+81
+95
+138
+164
+159
+130
+86
+34
+5
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+75
+89
+93
+93
+94
+99
+103
+105
+106
+105
+100
+98
+97
+97
+97
+100
+100
+99
+92
+74
+43
+30
+22
+14
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+15
+43
+68
+75
+71
+70
+77
+87
+98
+101
+100
+95
+88
+81
+74
+73
+73
+72
+71
+67
+65
+64
+64
+66
+74
+85
+95
+103
+107
+106
+101
+95
+87
+79
+71
+65
+59
+56
+55
+56
+56
+56
+56
+55
+56
+57
+60
+64
+69
+77
+84
+88
+90
+92
+94
+97
+98
+98
+98
+97
+95
+93
+92
+91
+90
+83
+77
+74
+75
+79
+75
+54
+28
+7
+1
+1
+3
+12
+36
+84
+94
+97
+96
+92
+75
+69
+67
+71
+83
+155
+190
+204
+203
+193
+173
+156
+133
+106
+78
+56
+53
+51
+51
+50
+49
+49
+49
+49
+50
+50
+50
+50
+50
+50
+50
+49
+49
+50
+50
+50
+51
+51
+52
+52
+51
+51
+51
+51
+52
+51
+49
+44
+39
+37
+37
+38
+38
+39
+39
+41
+42
+42
+43
+43
+43
+43
+43
+43
+42
+41
+40
+40
+40
+40
+40
+40
+40
+40
+39
+39
+39
+38
+37
+36
+33
+31
+29
+29
+29
+33
+38
+41
+43
+44
+56
+96
+127
+145
+147
+140
+109
+81
+60
+53
+52
+52
+52
+52
+52
+50
+48
+47
+46
+46
+46
+49
+52
+55
+56
+56
+57
+60
+67
+76
+86
+91
+98
+102
+103
+102
+90
+83
+87
+109
+160
+161
+147
+114
+58
+12
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+73
+88
+93
+93
+93
+97
+101
+104
+106
+106
+102
+101
+100
+99
+99
+100
+100
+96
+85
+65
+35
+25
+17
+9
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+9
+37
+59
+72
+73
+70
+74
+85
+96
+104
+106
+104
+99
+93
+87
+81
+79
+77
+75
+72
+68
+67
+69
+74
+84
+93
+99
+101
+102
+102
+95
+88
+83
+77
+70
+59
+56
+53
+52
+51
+51
+50
+51
+51
+53
+54
+55
+57
+59
+63
+70
+77
+82
+86
+89
+92
+95
+97
+98
+99
+99
+99
+98
+97
+95
+93
+90
+84
+78
+76
+78
+77
+69
+51
+23
+3
+1
+2
+8
+24
+74
+91
+96
+96
+94
+79
+70
+67
+69
+77
+139
+182
+202
+204
+196
+177
+160
+137
+110
+81
+57
+53
+51
+51
+50
+49
+49
+49
+49
+50
+50
+51
+50
+50
+50
+50
+49
+49
+49
+50
+50
+51
+51
+52
+52
+52
+51
+51
+51
+52
+52
+50
+46
+41
+38
+37
+38
+38
+38
+38
+39
+40
+40
+41
+41
+42
+42
+41
+41
+40
+39
+39
+39
+40
+40
+40
+41
+41
+42
+42
+42
+42
+41
+40
+38
+34
+31
+29
+28
+28
+31
+36
+40
+42
+44
+51
+82
+116
+141
+147
+143
+120
+91
+66
+54
+53
+53
+53
+52
+52
+51
+49
+47
+46
+46
+46
+49
+52
+55
+56
+57
+57
+60
+66
+76
+85
+90
+96
+101
+104
+103
+95
+86
+84
+94
+151
+159
+154
+130
+80
+21
+7
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+72
+87
+93
+93
+92
+95
+98
+103
+106
+106
+104
+102
+101
+101
+101
+101
+99
+91
+75
+53
+27
+20
+12
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+24
+53
+68
+73
+71
+70
+80
+92
+102
+107
+108
+105
+101
+97
+91
+86
+83
+81
+77
+74
+72
+77
+82
+89
+96
+101
+101
+98
+95
+92
+85
+78
+70
+63
+57
+51
+48
+47
+45
+44
+44
+44
+46
+48
+50
+52
+53
+54
+55
+57
+63
+69
+75
+81
+84
+87
+90
+93
+95
+98
+100
+101
+101
+100
+99
+97
+96
+92
+88
+83
+80
+79
+76
+67
+45
+11
+4
+2
+5
+15
+62
+86
+95
+96
+95
+82
+72
+67
+68
+73
+122
+173
+198
+205
+199
+180
+164
+141
+115
+85
+59
+54
+52
+51
+50
+49
+49
+49
+49
+50
+51
+51
+51
+50
+50
+50
+50
+49
+50
+50
+50
+51
+51
+52
+52
+52
+51
+51
+51
+52
+52
+51
+49
+44
+39
+38
+38
+38
+38
+38
+38
+38
+39
+39
+39
+40
+39
+39
+39
+39
+39
+39
+40
+40
+41
+43
+44
+44
+45
+45
+46
+46
+45
+44
+42
+37
+32
+29
+28
+28
+29
+34
+39
+42
+43
+48
+71
+105
+136
+147
+145
+128
+101
+73
+56
+53
+53
+53
+53
+52
+51
+49
+47
+46
+46
+47
+49
+52
+55
+56
+57
+57
+60
+66
+76
+85
+89
+94
+99
+104
+104
+99
+90
+83
+86
+138
+156
+158
+142
+102
+33
+12
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+71
+87
+92
+92
+92
+93
+96
+101
+105
+106
+105
+103
+102
+102
+102
+101
+96
+83
+64
+40
+20
+14
+8
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+8
+44
+65
+73
+72
+69
+73
+87
+98
+106
+109
+108
+106
+103
+100
+95
+90
+87
+84
+82
+80
+81
+89
+95
+100
+101
+100
+96
+90
+85
+79
+72
+65
+57
+51
+46
+44
+42
+40
+38
+37
+37
+39
+41
+43
+46
+48
+50
+51
+52
+53
+56
+61
+67
+73
+78
+82
+85
+87
+91
+94
+98
+100
+101
+102
+101
+101
+100
+99
+97
+92
+84
+82
+80
+76
+66
+26
+10
+3
+4
+8
+48
+79
+93
+96
+96
+86
+74
+68
+67
+70
+107
+161
+192
+205
+202
+185
+168
+146
+120
+90
+61
+55
+52
+51
+50
+49
+49
+49
+49
+50
+51
+51
+51
+51
+50
+50
+50
+50
+50
+50
+50
+51
+51
+52
+52
+52
+52
+51
+51
+51
+52
+52
+51
+48
+42
+39
+38
+38
+38
+38
+38
+38
+38
+38
+38
+38
+38
+38
+38
+38
+39
+40
+41
+42
+44
+45
+46
+47
+47
+48
+49
+49
+49
+49
+47
+41
+34
+30
+28
+28
+29
+33
+38
+41
+43
+46
+63
+96
+130
+146
+146
+134
+108
+79
+58
+53
+53
+53
+53
+53
+51
+49
+48
+47
+47
+47
+50
+53
+55
+57
+57
+58
+60
+66
+75
+85
+88
+93
+97
+103
+104
+102
+93
+85
+84
+122
+151
+160
+150
+123
+48
+18
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+70
+86
+92
+92
+91
+91
+92
+98
+104
+106
+105
+104
+103
+103
+102
+101
+88
+71
+50
+28
+13
+9
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+6
+19
+63
+72
+73
+71
+69
+76
+92
+103
+108
+110
+108
+107
+105
+102
+99
+95
+92
+91
+90
+91
+96
+98
+99
+99
+98
+93
+89
+83
+75
+65
+52
+46
+43
+42
+40
+37
+35
+35
+34
+34
+34
+35
+36
+38
+40
+44
+46
+48
+48
+49
+50
+53
+58
+65
+71
+78
+80
+82
+84
+87
+94
+98
+101
+102
+102
+101
+101
+100
+99
+98
+91
+86
+83
+81
+78
+51
+20
+7
+4
+5
+32
+69
+88
+96
+96
+89
+77
+70
+67
+68
+92
+147
+185
+204
+204
+189
+173
+152
+126
+96
+64
+56
+52
+51
+50
+49
+49
+49
+49
+50
+51
+51
+51
+51
+51
+50
+50
+50
+50
+50
+50
+51
+51
+52
+52
+52
+52
+51
+51
+51
+52
+52
+52
+50
+47
+40
+39
+39
+39
+39
+38
+38
+38
+38
+38
+38
+38
+38
+38
+39
+41
+43
+44
+46
+47
+47
+48
+48
+48
+48
+49
+51
+52
+52
+51
+46
+38
+32
+28
+28
+29
+33
+38
+41
+43
+45
+58
+89
+124
+145
+146
+138
+114
+85
+61
+54
+53
+53
+53
+53
+52
+50
+48
+47
+47
+47
+50
+53
+56
+57
+57
+58
+61
+66
+75
+85
+88
+91
+95
+101
+104
+103
+96
+87
+83
+107
+145
+159
+156
+140
+66
+27
+8
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+69
+86
+91
+91
+91
+89
+88
+92
+98
+105
+106
+105
+105
+103
+101
+89
+71
+50
+30
+14
+7
+5
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+4
+16
+42
+73
+75
+72
+68
+68
+79
+95
+104
+109
+109
+109
+108
+107
+106
+105
+103
+102
+101
+100
+100
+99
+98
+97
+93
+86
+72
+63
+55
+48
+43
+40
+38
+37
+36
+35
+35
+34
+34
+34
+34
+34
+34
+34
+35
+37
+40
+42
+44
+45
+45
+45
+45
+47
+51
+56
+66
+72
+77
+80
+81
+84
+90
+95
+99
+101
+101
+101
+101
+101
+102
+101
+97
+92
+87
+85
+76
+46
+21
+6
+6
+16
+52
+79
+94
+95
+93
+81
+72
+67
+67
+78
+124
+169
+201
+207
+195
+180
+160
+136
+105
+69
+58
+53
+51
+50
+49
+49
+49
+49
+49
+51
+51
+51
+51
+51
+51
+50
+50
+50
+50
+50
+50
+51
+52
+52
+52
+52
+52
+51
+51
+51
+52
+52
+52
+51
+46
+42
+40
+40
+40
+40
+40
+39
+39
+39
+39
+40
+41
+42
+44
+46
+46
+47
+47
+47
+48
+48
+48
+48
+48
+49
+51
+53
+53
+53
+50
+41
+34
+30
+29
+30
+33
+38
+41
+43
+45
+55
+84
+118
+144
+146
+140
+119
+91
+64
+54
+54
+53
+53
+53
+52
+50
+49
+48
+48
+48
+51
+54
+56
+57
+57
+58
+61
+67
+75
+84
+87
+89
+92
+97
+103
+103
+99
+91
+84
+93
+135
+155
+159
+153
+92
+42
+14
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+68
+85
+91
+91
+90
+88
+85
+85
+90
+100
+103
+103
+101
+97
+91
+74
+53
+33
+17
+9
+6
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+9
+27
+59
+75
+74
+70
+67
+67
+80
+95
+104
+108
+109
+109
+108
+108
+107
+106
+104
+102
+101
+100
+99
+96
+91
+82
+72
+62
+51
+46
+43
+40
+38
+37
+37
+37
+38
+38
+38
+38
+38
+38
+37
+36
+35
+35
+35
+36
+38
+40
+41
+43
+43
+43
+43
+43
+44
+46
+52
+58
+64
+71
+75
+80
+83
+89
+94
+98
+99
+100
+100
+100
+100
+101
+99
+96
+93
+89
+84
+66
+39
+15
+7
+12
+38
+67
+89
+95
+94
+85
+75
+68
+67
+72
+107
+153
+193
+207
+199
+185
+167
+143
+114
+75
+61
+54
+51
+50
+49
+49
+49
+49
+49
+50
+51
+51
+51
+51
+51
+51
+50
+50
+50
+50
+50
+51
+52
+53
+53
+52
+52
+52
+51
+51
+52
+52
+52
+52
+50
+46
+43
+42
+41
+41
+42
+42
+42
+42
+43
+43
+44
+45
+46
+47
+47
+47
+47
+48
+48
+48
+48
+49
+49
+50
+52
+54
+55
+55
+51
+42
+35
+31
+30
+31
+35
+39
+42
+43
+45
+54
+83
+117
+143
+146
+141
+121
+93
+66
+55
+54
+53
+53
+53
+52
+51
+49
+48
+48
+49
+51
+54
+57
+57
+58
+58
+61
+67
+76
+83
+85
+87
+89
+94
+102
+103
+100
+94
+84
+89
+126
+150
+161
+157
+110
+55
+21
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+67
+84
+90
+91
+90
+89
+82
+79
+81
+89
+94
+95
+91
+84
+75
+51
+33
+20
+11
+7
+4
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+17
+40
+70
+77
+72
+68
+66
+67
+80
+94
+103
+108
+109
+108
+108
+108
+107
+105
+103
+101
+99
+95
+90
+79
+70
+61
+53
+46
+41
+40
+39
+39
+40
+41
+42
+43
+44
+44
+45
+45
+44
+43
+42
+40
+38
+37
+36
+35
+37
+38
+40
+41
+42
+42
+42
+42
+42
+42
+44
+48
+52
+57
+63
+69
+74
+80
+87
+94
+98
+99
+99
+99
+99
+100
+100
+99
+96
+93
+90
+80
+56
+30
+11
+11
+27
+55
+82
+94
+94
+88
+79
+70
+66
+69
+92
+137
+181
+205
+203
+191
+174
+152
+123
+82
+65
+55
+52
+50
+49
+49
+49
+49
+49
+50
+51
+52
+52
+52
+52
+52
+51
+51
+50
+50
+50
+51
+52
+53
+53
+53
+52
+52
+51
+51
+52
+52
+52
+52
+52
+50
+47
+45
+43
+42
+43
+43
+43
+44
+44
+45
+45
+46
+46
+47
+47
+47
+47
+48
+48
+48
+49
+49
+50
+51
+54
+55
+56
+56
+51
+42
+35
+31
+31
+32
+36
+39
+42
+43
+45
+55
+83
+117
+143
+145
+141
+121
+94
+66
+55
+54
+53
+53
+53
+52
+51
+50
+49
+49
+49
+52
+55
+57
+58
+58
+58
+62
+68
+76
+82
+84
+85
+87
+91
+100
+102
+101
+96
+85
+87
+117
+144
+161
+160
+126
+69
+29
+7
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+67
+84
+90
+90
+90
+89
+81
+74
+71
+75
+80
+80
+74
+65
+53
+28
+17
+11
+8
+6
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+7
+27
+53
+75
+77
+70
+66
+65
+66
+80
+93
+101
+106
+107
+107
+107
+106
+104
+102
+98
+94
+89
+82
+72
+58
+50
+44
+41
+40
+40
+41
+42
+43
+44
+47
+48
+49
+49
+50
+50
+50
+50
+49
+48
+45
+43
+40
+38
+36
+36
+37
+38
+39
+41
+41
+41
+41
+41
+41
+41
+42
+43
+45
+49
+57
+62
+69
+76
+85
+94
+97
+98
+99
+99
+99
+100
+100
+99
+96
+93
+89
+73
+48
+18
+12
+19
+44
+72
+92
+93
+91
+82
+72
+66
+67
+81
+119
+166
+202
+205
+195
+181
+160
+132
+90
+69
+58
+52
+50
+49
+49
+49
+49
+49
+50
+51
+52
+52
+53
+53
+53
+52
+51
+51
+51
+51
+51
+52
+53
+53
+53
+53
+52
+52
+51
+51
+52
+52
+52
+52
+52
+51
+49
+47
+45
+44
+44
+44
+45
+45
+46
+46
+46
+47
+47
+47
+48
+48
+48
+49
+49
+50
+50
+51
+54
+56
+57
+57
+57
+51
+41
+35
+32
+32
+33
+37
+40
+43
+44
+46
+58
+86
+119
+143
+145
+140
+120
+93
+66
+55
+54
+54
+53
+53
+52
+51
+50
+49
+49
+50
+53
+56
+58
+58
+58
+59
+62
+68
+77
+81
+82
+83
+84
+87
+98
+101
+101
+97
+87
+86
+109
+138
+160
+161
+139
+83
+39
+10
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+66
+83
+89
+90
+90
+89
+81
+71
+64
+62
+63
+58
+50
+39
+26
+17
+14
+10
+7
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+12
+37
+63
+78
+77
+68
+65
+64
+65
+78
+90
+98
+103
+105
+105
+103
+102
+99
+95
+86
+76
+66
+56
+48
+43
+42
+41
+41
+41
+45
+46
+48
+49
+49
+49
+50
+50
+50
+51
+51
+52
+52
+52
+52
+50
+48
+45
+42
+39
+36
+36
+37
+38
+40
+40
+41
+41
+41
+41
+41
+41
+41
+41
+42
+44
+47
+53
+60
+69
+84
+92
+96
+98
+98
+99
+99
+100
+99
+99
+96
+94
+87
+68
+32
+15
+17
+33
+59
+87
+93
+92
+85
+76
+67
+66
+73
+103
+146
+195
+205
+200
+188
+169
+143
+99
+75
+61
+53
+51
+50
+49
+49
+49
+49
+50
+51
+52
+53
+54
+54
+54
+53
+52
+51
+51
+51
+51
+52
+53
+53
+53
+53
+53
+52
+51
+51
+51
+52
+52
+53
+53
+52
+52
+50
+48
+47
+46
+46
+46
+46
+46
+46
+47
+47
+48
+48
+48
+48
+49
+50
+50
+51
+52
+53
+56
+58
+58
+58
+57
+48
+39
+34
+32
+32
+34
+38
+41
+43
+44
+47
+61
+91
+122
+143
+144
+138
+118
+91
+66
+55
+54
+54
+53
+53
+53
+51
+50
+50
+50
+51
+54
+57
+58
+58
+58
+59
+62
+69
+77
+80
+80
+81
+82
+84
+95
+100
+101
+98
+89
+86
+102
+132
+158
+162
+149
+97
+49
+14
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+66
+82
+88
+89
+89
+90
+87
+74
+60
+53
+49
+41
+35
+30
+24
+17
+14
+9
+4
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+4
+22
+50
+74
+80
+75
+67
+63
+63
+63
+71
+79
+84
+87
+88
+87
+81
+76
+70
+62
+53
+48
+45
+44
+43
+43
+44
+45
+47
+49
+49
+49
+49
+49
+49
+49
+49
+50
+50
+51
+52
+52
+53
+54
+54
+54
+54
+52
+49
+46
+41
+38
+36
+36
+37
+39
+39
+40
+40
+40
+40
+40
+40
+40
+41
+41
+42
+43
+45
+48
+60
+75
+87
+95
+98
+99
+99
+99
+100
+99
+98
+97
+95
+85
+64
+23
+20
+25
+42
+74
+92
+92
+89
+82
+70
+66
+68
+85
+119
+175
+206
+204
+195
+180
+158
+114
+86
+67
+56
+51
+50
+49
+49
+49
+48
+49
+51
+52
+53
+54
+55
+55
+55
+54
+53
+52
+52
+52
+52
+53
+54
+54
+54
+53
+53
+52
+51
+51
+51
+51
+52
+52
+53
+53
+53
+53
+52
+51
+50
+49
+49
+48
+48
+48
+48
+49
+49
+49
+50
+51
+52
+52
+53
+54
+56
+59
+59
+59
+57
+53
+43
+37
+34
+34
+34
+37
+41
+43
+45
+45
+50
+70
+101
+129
+144
+144
+134
+112
+85
+63
+55
+54
+54
+54
+54
+53
+52
+51
+51
+51
+52
+56
+58
+58
+59
+59
+59
+63
+70
+77
+78
+78
+78
+78
+80
+91
+98
+100
+98
+91
+85
+95
+124
+154
+162
+156
+114
+65
+23
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+65
+81
+87
+88
+88
+90
+88
+79
+66
+54
+49
+42
+37
+32
+27
+19
+15
+9
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+9
+33
+59
+78
+81
+74
+66
+62
+61
+61
+65
+69
+72
+72
+71
+68
+62
+58
+54
+50
+47
+45
+44
+44
+45
+46
+47
+48
+48
+49
+49
+48
+48
+48
+48
+48
+48
+48
+49
+50
+51
+52
+53
+55
+56
+57
+57
+55
+53
+50
+46
+42
+39
+37
+36
+37
+38
+38
+39
+39
+40
+40
+40
+40
+40
+41
+41
+41
+42
+43
+48
+56
+68
+82
+93
+98
+99
+99
+100
+100
+99
+98
+97
+92
+82
+39
+27
+25
+35
+59
+88
+91
+90
+85
+74
+66
+67
+76
+102
+154
+200
+204
+200
+188
+169
+127
+96
+74
+59
+52
+50
+49
+49
+49
+48
+49
+50
+52
+53
+55
+56
+56
+56
+56
+55
+53
+53
+53
+53
+53
+54
+54
+54
+54
+53
+52
+51
+51
+51
+51
+51
+52
+52
+53
+53
+53
+53
+53
+52
+52
+51
+51
+51
+51
+51
+51
+51
+52
+52
+53
+53
+54
+55
+56
+58
+59
+59
+58
+55
+49
+39
+36
+35
+35
+36
+40
+43
+44
+45
+46
+54
+80
+110
+135
+144
+143
+129
+105
+80
+61
+55
+54
+54
+54
+54
+53
+52
+52
+52
+52
+54
+57
+58
+59
+59
+59
+59
+64
+70
+77
+77
+76
+75
+76
+77
+88
+96
+99
+98
+92
+85
+92
+120
+150
+163
+159
+125
+76
+31
+6
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+65
+80
+86
+87
+87
+89
+89
+84
+73
+59
+52
+47
+41
+36
+32
+22
+16
+8
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+15
+43
+67
+81
+82
+73
+65
+61
+60
+59
+60
+61
+61
+60
+58
+55
+51
+49
+47
+45
+45
+45
+45
+46
+47
+48
+48
+49
+49
+48
+48
+48
+48
+48
+47
+47
+47
+48
+48
+49
+51
+52
+54
+55
+57
+58
+59
+59
+57
+55
+50
+46
+43
+40
+37
+37
+37
+38
+38
+39
+39
+39
+39
+40
+40
+40
+40
+40
+41
+41
+43
+46
+54
+65
+80
+93
+97
+99
+99
+100
+99
+98
+98
+96
+92
+59
+36
+28
+32
+46
+82
+88
+90
+87
+79
+67
+66
+70
+88
+129
+191
+202
+202
+195
+179
+141
+108
+82
+64
+54
+50
+50
+49
+49
+48
+49
+50
+51
+53
+55
+57
+57
+57
+57
+57
+55
+54
+54
+54
+54
+54
+54
+54
+54
+54
+53
+52
+51
+51
+51
+51
+51
+52
+52
+53
+53
+53
+53
+53
+53
+53
+53
+53
+53
+53
+53
+53
+53
+54
+54
+55
+56
+57
+58
+59
+60
+58
+55
+50
+44
+37
+36
+36
+36
+38
+42
+44
+45
+46
+48
+63
+92
+119
+139
+144
+141
+122
+97
+74
+59
+55
+54
+54
+54
+54
+53
+52
+52
+52
+53
+56
+58
+59
+59
+59
+59
+60
+65
+71
+76
+76
+74
+74
+73
+74
+85
+94
+98
+97
+93
+85
+90
+115
+145
+163
+161
+135
+88
+39
+8
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+64
+79
+85
+86
+86
+89
+89
+87
+80
+66
+57
+53
+48
+43
+39
+27
+17
+8
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+22
+53
+74
+83
+83
+72
+65
+61
+59
+57
+56
+55
+54
+52
+50
+48
+46
+46
+45
+45
+45
+46
+47
+48
+48
+49
+49
+49
+49
+49
+49
+48
+48
+47
+47
+47
+47
+48
+48
+49
+52
+54
+55
+57
+58
+60
+61
+61
+61
+59
+54
+50
+47
+43
+40
+37
+37
+37
+38
+38
+39
+39
+39
+39
+39
+39
+39
+39
+40
+40
+41
+42
+44
+50
+62
+82
+92
+97
+99
+99
+99
+99
+98
+98
+96
+78
+49
+35
+32
+38
+72
+85
+89
+88
+83
+69
+66
+67
+78
+105
+176
+197
+204
+200
+189
+155
+122
+93
+70
+57
+51
+50
+49
+49
+48
+48
+49
+51
+53
+55
+58
+58
+59
+58
+58
+57
+56
+55
+55
+55
+55
+55
+55
+55
+55
+54
+52
+51
+51
+51
+50
+51
+51
+51
+52
+53
+53
+53
+53
+53
+54
+54
+54
+54
+54
+54
+54
+55
+55
+55
+56
+58
+59
+59
+60
+59
+56
+51
+45
+40
+36
+36
+37
+38
+41
+44
+45
+46
+48
+52
+75
+105
+128
+142
+144
+137
+113
+88
+68
+57
+55
+54
+54
+54
+54
+53
+53
+53
+53
+54
+58
+59
+60
+60
+59
+59
+60
+65
+71
+76
+76
+73
+72
+71
+72
+82
+93
+97
+97
+93
+85
+88
+111
+141
+163
+162
+143
+98
+48
+11
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+62
+78
+83
+84
+85
+87
+89
+89
+85
+76
+64
+60
+56
+52
+45
+33
+19
+9
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+5
+30
+62
+79
+85
+84
+71
+65
+61
+59
+56
+52
+51
+49
+47
+46
+46
+45
+45
+45
+45
+47
+48
+48
+49
+49
+50
+51
+51
+51
+51
+49
+49
+48
+47
+47
+47
+47
+48
+49
+50
+54
+57
+59
+60
+61
+62
+62
+63
+63
+62
+60
+55
+50
+46
+44
+40
+38
+38
+38
+38
+39
+39
+38
+38
+37
+37
+37
+38
+38
+39
+40
+41
+42
+43
+45
+63
+81
+92
+97
+99
+99
+99
+99
+98
+98
+91
+63
+44
+34
+35
+60
+80
+88
+89
+87
+73
+67
+66
+71
+85
+156
+190
+203
+203
+197
+169
+136
+105
+79
+61
+52
+50
+49
+49
+48
+48
+49
+50
+52
+54
+58
+59
+60
+60
+59
+58
+57
+57
+56
+56
+55
+55
+55
+55
+55
+54
+53
+52
+51
+51
+50
+50
+50
+50
+51
+52
+52
+53
+53
+53
+54
+54
+54
+55
+55
+55
+55
+55
+56
+57
+58
+59
+59
+59
+59
+56
+51
+45
+41
+38
+37
+37
+39
+41
+44
+46
+46
+47
+51
+59
+90
+119
+136
+144
+143
+130
+102
+79
+62
+55
+55
+54
+54
+54
+54
+54
+54
+54
+54
+56
+59
+60
+60
+60
+59
+59
+61
+66
+72
+75
+75
+72
+70
+70
+70
+80
+91
+96
+97
+94
+85
+87
+108
+136
+163
+163
+150
+108
+57
+15
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+60
+75
+81
+82
+82
+85
+88
+89
+88
+83
+72
+66
+62
+58
+52
+39
+21
+9
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+9
+43
+72
+84
+86
+85
+71
+65
+62
+59
+56
+50
+48
+47
+46
+46
+46
+46
+46
+46
+47
+49
+49
+50
+51
+51
+52
+52
+52
+52
+51
+48
+47
+47
+47
+47
+48
+50
+52
+55
+58
+60
+61
+61
+62
+62
+63
+63
+64
+64
+64
+63
+61
+57
+51
+47
+44
+42
+41
+41
+40
+39
+39
+38
+38
+37
+37
+37
+37
+38
+38
+39
+40
+41
+42
+42
+44
+55
+72
+88
+97
+98
+98
+99
+98
+98
+96
+82
+59
+41
+38
+47
+71
+84
+88
+88
+80
+70
+66
+67
+72
+120
+169
+196
+206
+204
+186
+157
+125
+95
+71
+55
+52
+50
+49
+49
+48
+48
+49
+51
+53
+57
+59
+60
+61
+61
+60
+60
+59
+58
+57
+57
+57
+57
+56
+56
+55
+54
+53
+52
+51
+50
+50
+49
+49
+49
+49
+50
+50
+51
+52
+52
+53
+53
+53
+54
+55
+55
+56
+57
+57
+58
+58
+58
+57
+53
+47
+43
+40
+39
+38
+39
+41
+43
+45
+46
+47
+48
+51
+61
+78
+112
+133
+142
+143
+139
+112
+86
+68
+57
+55
+55
+55
+55
+54
+54
+54
+55
+55
+56
+59
+61
+61
+61
+60
+60
+60
+62
+67
+73
+75
+74
+70
+69
+68
+69
+77
+89
+95
+96
+94
+85
+86
+104
+131
+162
+164
+156
+119
+69
+21
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+57
+73
+79
+80
+80
+82
+86
+88
+88
+86
+78
+73
+69
+65
+59
+45
+25
+10
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+5
+14
+52
+77
+86
+87
+85
+71
+65
+62
+60
+56
+50
+48
+46
+46
+45
+46
+46
+47
+48
+49
+50
+50
+51
+51
+52
+52
+51
+51
+49
+48
+47
+46
+47
+48
+49
+53
+55
+57
+58
+59
+60
+61
+61
+62
+62
+63
+63
+63
+63
+63
+63
+63
+60
+57
+52
+46
+44
+43
+42
+41
+40
+40
+39
+38
+37
+37
+37
+38
+38
+38
+39
+40
+41
+41
+42
+42
+46
+55
+69
+88
+97
+98
+98
+98
+98
+97
+90
+70
+50
+40
+44
+63
+78
+87
+88
+83
+73
+67
+66
+68
+98
+149
+184
+202
+206
+196
+172
+142
+110
+82
+60
+54
+51
+49
+49
+48
+48
+49
+50
+52
+56
+58
+60
+61
+62
+62
+61
+60
+60
+59
+58
+58
+58
+58
+57
+57
+55
+54
+52
+51
+50
+49
+49
+49
+48
+48
+49
+49
+50
+50
+51
+51
+52
+52
+53
+54
+54
+55
+56
+56
+56
+55
+52
+49
+46
+43
+41
+40
+40
+40
+42
+44
+45
+46
+47
+48
+51
+60
+76
+97
+127
+138
+142
+138
+129
+96
+75
+62
+56
+55
+55
+55
+55
+55
+55
+55
+56
+57
+58
+60
+62
+62
+61
+60
+60
+60
+62
+68
+73
+74
+73
+70
+68
+68
+68
+76
+88
+94
+95
+93
+84
+86
+102
+128
+161
+165
+159
+126
+79
+27
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+55
+71
+77
+78
+77
+78
+85
+88
+88
+87
+81
+77
+74
+70
+65
+48
+26
+11
+2
+1
+1
+1
+1
+1
+1
+1
+1
+2
+7
+18
+60
+80
+88
+89
+86
+72
+66
+63
+61
+58
+51
+48
+46
+45
+45
+46
+46
+47
+48
+50
+50
+51
+51
+51
+51
+51
+50
+49
+47
+46
+46
+48
+49
+51
+54
+56
+58
+59
+59
+60
+60
+60
+60
+60
+60
+60
+60
+60
+61
+61
+62
+62
+61
+59
+55
+50
+47
+45
+43
+42
+41
+40
+39
+38
+38
+38
+38
+39
+40
+40
+40
+40
+41
+41
+42
+42
+43
+46
+55
+70
+90
+96
+98
+98
+98
+98
+94
+79
+60
+43
+44
+56
+72
+85
+87
+85
+77
+69
+65
+65
+82
+127
+167
+196
+206
+203
+185
+159
+128
+96
+68
+58
+52
+50
+49
+48
+48
+48
+49
+50
+54
+57
+59
+61
+62
+63
+62
+62
+61
+60
+59
+59
+59
+59
+59
+58
+57
+55
+54
+52
+50
+49
+49
+48
+47
+47
+47
+47
+48
+48
+49
+49
+50
+51
+51
+52
+52
+53
+52
+52
+50
+49
+46
+44
+43
+41
+41
+41
+42
+43
+44
+46
+46
+47
+48
+50
+59
+75
+94
+115
+136
+140
+138
+130
+113
+81
+66
+58
+55
+55
+55
+55
+55
+55
+56
+56
+57
+59
+60
+62
+62
+62
+61
+60
+60
+60
+63
+69
+73
+74
+72
+69
+68
+68
+68
+75
+87
+93
+94
+93
+84
+85
+100
+125
+160
+166
+161
+133
+88
+33
+5
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+52
+68
+74
+75
+74
+75
+82
+87
+88
+88
+84
+81
+77
+73
+68
+48
+25
+10
+2
+1
+1
+1
+1
+1
+1
+1
+1
+3
+9
+23
+66
+83
+90
+90
+87
+73
+66
+63
+62
+60
+53
+48
+46
+46
+45
+46
+46
+47
+48
+49
+50
+50
+51
+50
+50
+49
+47
+47
+46
+47
+48
+51
+53
+56
+57
+58
+58
+58
+58
+58
+57
+56
+55
+55
+54
+54
+54
+55
+55
+56
+58
+59
+59
+59
+57
+53
+49
+46
+44
+43
+42
+41
+40
+39
+39
+39
+40
+41
+42
+42
+42
+42
+42
+42
+43
+43
+42
+43
+45
+52
+77
+90
+96
+98
+98
+98
+97
+86
+69
+48
+45
+52
+67
+81
+87
+86
+80
+72
+66
+64
+71
+104
+147
+185
+204
+207
+196
+175
+146
+113
+78
+64
+55
+51
+50
+49
+48
+48
+48
+49
+52
+55
+58
+61
+62
+63
+63
+63
+62
+62
+61
+60
+60
+60
+60
+59
+58
+57
+55
+54
+51
+50
+49
+48
+47
+46
+46
+45
+45
+46
+46
+47
+47
+48
+48
+48
+48
+48
+47
+46
+45
+43
+42
+42
+42
+41
+42
+43
+44
+45
+46
+47
+47
+48
+50
+58
+75
+94
+113
+130
+140
+138
+131
+117
+95
+68
+59
+56
+55
+55
+55
+56
+56
+56
+57
+58
+59
+61
+62
+63
+63
+62
+61
+60
+60
+60
+64
+69
+73
+73
+71
+69
+68
+68
+68
+75
+86
+92
+94
+92
+84
+84
+98
+123
+159
+167
+163
+138
+96
+40
+6
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+49
+64
+70
+71
+71
+72
+79
+85
+88
+88
+85
+82
+79
+74
+67
+45
+22
+8
+2
+1
+1
+1
+1
+1
+1
+1
+1
+3
+10
+26
+72
+86
+91
+91
+88
+74
+67
+64
+63
+61
+55
+50
+47
+46
+45
+46
+46
+47
+48
+49
+50
+49
+49
+48
+47
+46
+46
+46
+47
+50
+54
+56
+57
+58
+58
+58
+57
+55
+54
+52
+49
+48
+47
+47
+46
+46
+46
+47
+47
+48
+51
+52
+54
+56
+56
+55
+51
+48
+46
+44
+43
+42
+41
+40
+40
+40
+42
+43
+44
+44
+44
+44
+45
+45
+45
+44
+43
+43
+43
+44
+57
+78
+91
+97
+98
+98
+97
+91
+77
+54
+46
+49
+62
+77
+86
+86
+83
+75
+67
+63
+66
+84
+123
+167
+200
+208
+203
+189
+165
+133
+92
+72
+60
+53
+50
+49
+49
+48
+48
+48
+50
+53
+56
+60
+62
+63
+64
+64
+63
+63
+62
+61
+61
+61
+60
+60
+59
+58
+57
+55
+53
+51
+49
+48
+47
+45
+44
+44
+43
+42
+42
+42
+42
+42
+42
+42
+42
+41
+41
+41
+41
+41
+41
+41
+42
+43
+44
+45
+46
+47
+47
+48
+48
+50
+54
+75
+97
+115
+129
+138
+139
+132
+118
+99
+76
+59
+56
+55
+55
+56
+56
+56
+57
+58
+59
+60
+61
+63
+63
+63
+63
+63
+61
+60
+60
+61
+66
+70
+73
+73
+70
+68
+68
+68
+68
+74
+85
+91
+93
+91
+83
+84
+96
+121
+158
+168
+165
+143
+104
+47
+7
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+46
+58
+64
+65
+65
+66
+74
+81
+86
+87
+85
+81
+77
+69
+58
+35
+16
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+4
+14
+33
+76
+87
+92
+92
+90
+76
+68
+64
+63
+63
+59
+54
+49
+46
+45
+45
+45
+46
+46
+46
+46
+46
+46
+46
+46
+47
+50
+53
+55
+57
+58
+57
+57
+55
+52
+49
+47
+45
+44
+43
+43
+42
+42
+42
+43
+43
+43
+43
+43
+43
+44
+45
+46
+47
+47
+48
+48
+48
+46
+45
+43
+43
+42
+42
+42
+43
+43
+44
+44
+44
+44
+45
+46
+48
+52
+51
+49
+46
+43
+43
+44
+57
+75
+90
+97
+98
+98
+94
+83
+60
+47
+48
+58
+71
+85
+86
+85
+79
+71
+64
+63
+70
+96
+134
+178
+207
+208
+202
+187
+161
+118
+91
+71
+59
+52
+49
+49
+49
+48
+48
+48
+50
+53
+56
+59
+63
+64
+64
+64
+64
+64
+63
+63
+63
+62
+62
+61
+60
+58
+56
+54
+52
+50
+49
+47
+45
+44
+43
+42
+42
+41
+40
+40
+40
+40
+40
+40
+40
+40
+41
+42
+42
+44
+45
+46
+47
+47
+47
+47
+48
+49
+50
+54
+64
+82
+110
+124
+133
+137
+138
+128
+112
+93
+75
+60
+56
+55
+56
+56
+56
+57
+58
+59
+60
+61
+63
+64
+64
+64
+64
+64
+62
+61
+60
+60
+62
+67
+71
+73
+73
+69
+68
+68
+68
+68
+74
+84
+90
+91
+90
+83
+83
+95
+119
+157
+169
+166
+149
+113
+56
+10
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+43
+53
+58
+60
+60
+60
+66
+75
+81
+83
+82
+78
+71
+61
+48
+25
+11
+3
+1
+1
+1
+1
+1
+1
+1
+1
+2
+6
+16
+37
+79
+88
+92
+92
+91
+79
+69
+64
+63
+63
+61
+58
+54
+49
+47
+46
+46
+46
+46
+46
+46
+46
+47
+48
+51
+54
+56
+57
+57
+57
+54
+51
+49
+47
+45
+44
+43
+42
+42
+42
+42
+42
+42
+42
+42
+42
+43
+43
+43
+43
+44
+44
+45
+45
+46
+46
+46
+45
+45
+44
+43
+43
+43
+43
+43
+44
+44
+44
+45
+45
+45
+45
+46
+49
+55
+58
+57
+53
+48
+44
+43
+48
+62
+80
+94
+98
+97
+94
+84
+63
+47
+48
+56
+68
+83
+86
+85
+81
+74
+66
+62
+66
+81
+110
+155
+195
+205
+207
+198
+180
+140
+110
+86
+68
+57
+51
+50
+49
+48
+48
+48
+48
+50
+52
+55
+59
+62
+63
+64
+65
+64
+64
+64
+64
+64
+64
+63
+62
+61
+59
+56
+54
+52
+50
+48
+46
+45
+44
+43
+42
+41
+41
+41
+41
+41
+41
+42
+43
+44
+45
+46
+46
+47
+47
+47
+48
+48
+48
+48
+49
+52
+60
+73
+90
+109
+128
+133
+136
+136
+130
+109
+91
+75
+63
+57
+55
+56
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+65
+64
+64
+63
+62
+61
+61
+61
+63
+69
+72
+73
+72
+69
+68
+68
+68
+69
+74
+84
+89
+91
+89
+82
+82
+94
+118
+156
+169
+167
+152
+118
+62
+12
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+41
+48
+52
+53
+53
+51
+56
+63
+70
+73
+72
+67
+59
+48
+35
+14
+6
+2
+1
+1
+1
+1
+1
+1
+1
+1
+2
+7
+18
+39
+81
+89
+93
+93
+91
+81
+70
+65
+63
+63
+63
+61
+58
+55
+52
+49
+48
+48
+48
+49
+50
+51
+53
+54
+56
+57
+56
+55
+53
+50
+47
+46
+44
+43
+42
+42
+41
+41
+41
+41
+42
+42
+42
+42
+42
+42
+43
+43
+43
+43
+43
+44
+44
+45
+45
+45
+45
+45
+44
+44
+44
+44
+44
+44
+44
+44
+45
+45
+45
+45
+46
+47
+49
+52
+58
+65
+65
+63
+57
+49
+44
+45
+53
+67
+87
+96
+96
+94
+85
+64
+47
+48
+54
+66
+81
+86
+86
+83
+77
+69
+63
+63
+71
+91
+129
+178
+198
+207
+206
+196
+163
+132
+104
+81
+64
+54
+51
+50
+49
+48
+48
+48
+48
+50
+52
+56
+59
+61
+63
+64
+64
+64
+64
+64
+64
+64
+64
+64
+63
+62
+59
+58
+56
+54
+52
+50
+48
+47
+46
+45
+45
+44
+44
+44
+45
+45
+46
+46
+47
+47
+48
+48
+48
+48
+48
+48
+48
+49
+51
+56
+67
+83
+99
+114
+127
+136
+136
+133
+125
+112
+89
+74
+64
+57
+55
+56
+57
+57
+58
+59
+61
+62
+63
+64
+65
+65
+65
+65
+64
+64
+63
+62
+61
+61
+61
+65
+70
+72
+73
+72
+68
+68
+68
+68
+69
+73
+83
+88
+89
+88
+81
+82
+93
+118
+156
+170
+168
+155
+124
+68
+14
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+40
+43
+45
+46
+46
+42
+43
+47
+51
+53
+53
+48
+40
+30
+20
+5
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+7
+19
+42
+83
+90
+93
+93
+91
+83
+72
+65
+62
+62
+63
+63
+62
+60
+58
+54
+53
+53
+53
+53
+55
+57
+58
+58
+57
+55
+52
+49
+46
+44
+42
+42
+41
+41
+41
+41
+41
+41
+41
+41
+42
+42
+42
+42
+43
+43
+43
+43
+43
+43
+44
+44
+44
+44
+45
+45
+45
+45
+45
+44
+44
+44
+44
+45
+45
+45
+45
+46
+47
+48
+49
+53
+56
+60
+65
+73
+73
+72
+68
+59
+46
+45
+47
+56
+74
+92
+93
+92
+83
+63
+47
+47
+53
+64
+80
+86
+86
+84
+79
+72
+64
+62
+65
+77
+103
+156
+184
+202
+209
+206
+184
+156
+126
+99
+76
+59
+54
+51
+50
+49
+48
+48
+48
+48
+49
+52
+55
+57
+60
+62
+63
+64
+64
+64
+64
+64
+64
+64
+64
+63
+62
+60
+59
+57
+56
+54
+52
+51
+50
+50
+49
+49
+49
+49
+49
+50
+49
+49
+49
+49
+49
+49
+48
+49
+49
+49
+52
+55
+62
+72
+92
+109
+122
+132
+136
+137
+132
+122
+107
+90
+70
+62
+58
+56
+56
+57
+58
+59
+60
+61
+63
+64
+65
+66
+66
+66
+65
+65
+64
+64
+63
+61
+61
+61
+61
+67
+71
+72
+72
+71
+68
+68
+68
+69
+69
+73
+82
+87
+88
+87
+81
+81
+93
+117
+156
+170
+169
+157
+128
+74
+17
+6
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+38
+39
+39
+39
+39
+31
+29
+27
+26
+24
+22
+17
+12
+7
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+3
+8
+21
+46
+84
+91
+93
+93
+91
+85
+75
+67
+61
+61
+61
+62
+62
+62
+61
+60
+60
+59
+59
+59
+59
+59
+58
+55
+50
+45
+43
+42
+42
+41
+41
+41
+41
+41
+41
+41
+41
+41
+42
+42
+42
+43
+43
+44
+44
+45
+45
+45
+45
+45
+45
+45
+45
+45
+45
+45
+45
+45
+45
+46
+46
+46
+46
+46
+46
+47
+47
+48
+50
+52
+56
+62
+68
+75
+79
+82
+83
+82
+80
+74
+52
+47
+46
+49
+57
+82
+87
+86
+78
+59
+45
+46
+52
+63
+79
+86
+86
+85
+81
+75
+67
+63
+63
+68
+81
+129
+165
+191
+206
+212
+202
+179
+151
+121
+93
+68
+59
+54
+51
+50
+49
+48
+48
+48
+48
+49
+50
+52
+55
+58
+61
+62
+63
+64
+64
+64
+64
+64
+64
+63
+62
+61
+61
+60
+59
+57
+56
+56
+55
+54
+53
+53
+52
+52
+51
+51
+50
+50
+49
+49
+49
+49
+49
+49
+50
+52
+59
+70
+84
+101
+123
+131
+135
+136
+137
+133
+119
+102
+84
+68
+59
+57
+56
+57
+57
+59
+60
+61
+62
+63
+65
+66
+67
+67
+67
+66
+65
+65
+64
+64
+62
+61
+61
+61
+62
+69
+72
+73
+72
+70
+68
+68
+68
+69
+70
+73
+81
+86
+87
+86
+80
+81
+93
+117
+156
+171
+169
+160
+132
+79
+20
+7
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+37
+36
+34
+32
+30
+25
+22
+18
+15
+13
+8
+7
+5
+3
+3
+2
+2
+1
+1
+1
+1
+1
+2
+2
+3
+3
+5
+11
+24
+47
+85
+91
+93
+93
+92
+86
+77
+68
+61
+57
+58
+59
+61
+61
+61
+61
+60
+59
+58
+56
+49
+44
+42
+42
+42
+41
+41
+41
+41
+40
+40
+41
+41
+41
+41
+42
+43
+45
+46
+48
+50
+52
+54
+55
+56
+58
+58
+58
+58
+58
+58
+57
+56
+55
+53
+52
+51
+51
+50
+50
+50
+50
+51
+52
+53
+56
+59
+62
+66
+71
+80
+86
+92
+98
+105
+106
+103
+99
+95
+92
+73
+56
+48
+47
+49
+59
+66
+67
+63
+52
+44
+44
+51
+63
+79
+87
+87
+85
+82
+78
+70
+65
+62
+62
+65
+94
+131
+165
+191
+207
+212
+202
+184
+158
+129
+93
+74
+61
+54
+51
+49
+49
+48
+48
+48
+48
+48
+48
+49
+50
+52
+54
+56
+57
+59
+60
+61
+61
+62
+62
+61
+61
+60
+59
+58
+57
+56
+56
+55
+54
+53
+52
+52
+51
+50
+50
+49
+49
+49
+49
+49
+50
+52
+57
+64
+81
+97
+112
+125
+133
+135
+136
+136
+132
+124
+101
+83
+71
+63
+59
+57
+57
+58
+59
+60
+61
+63
+64
+65
+67
+68
+68
+68
+67
+67
+66
+65
+65
+64
+63
+62
+61
+61
+62
+65
+71
+72
+72
+72
+70
+68
+68
+69
+70
+71
+73
+80
+84
+86
+85
+80
+80
+92
+117
+156
+171
+170
+162
+137
+86
+23
+8
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+37
+35
+33
+30
+28
+24
+21
+18
+14
+12
+9
+8
+7
+6
+5
+4
+3
+3
+2
+2
+2
+2
+2
+3
+3
+4
+5
+11
+24
+47
+84
+90
+93
+93
+92
+87
+78
+69
+61
+56
+54
+55
+56
+57
+57
+55
+54
+51
+49
+47
+45
+44
+43
+43
+42
+40
+40
+40
+40
+40
+42
+43
+45
+47
+49
+53
+55
+58
+60
+62
+65
+67
+69
+70
+72
+73
+74
+75
+75
+76
+76
+75
+75
+75
+74
+73
+72
+71
+71
+70
+71
+71
+73
+74
+77
+80
+84
+89
+94
+99
+107
+112
+117
+121
+124
+125
+123
+118
+111
+105
+91
+69
+55
+48
+48
+51
+53
+52
+49
+43
+41
+42
+51
+65
+80
+87
+87
+86
+83
+79
+72
+68
+64
+61
+61
+74
+104
+138
+170
+195
+210
+208
+199
+182
+158
+121
+96
+77
+64
+56
+52
+51
+50
+49
+49
+48
+48
+48
+48
+49
+50
+50
+51
+52
+53
+55
+55
+56
+56
+56
+56
+56
+56
+55
+54
+54
+53
+52
+52
+51
+50
+50
+50
+49
+49
+49
+49
+50
+51
+52
+58
+65
+74
+86
+100
+116
+124
+130
+133
+136
+135
+130
+121
+109
+93
+76
+68
+63
+59
+58
+58
+59
+60
+61
+62
+64
+66
+67
+68
+68
+69
+68
+68
+67
+67
+66
+65
+64
+64
+63
+62
+62
+62
+64
+67
+72
+72
+72
+71
+69
+69
+69
+70
+71
+71
+73
+79
+83
+85
+84
+79
+80
+92
+117
+157
+172
+171
+163
+140
+91
+26
+9
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+37
+35
+32
+29
+27
+23
+21
+19
+17
+16
+14
+13
+12
+11
+10
+7
+6
+5
+4
+3
+3
+3
+3
+3
+3
+4
+6
+13
+26
+49
+83
+90
+93
+93
+92
+88
+80
+71
+62
+55
+52
+51
+51
+52
+52
+52
+51
+51
+50
+49
+47
+44
+41
+40
+39
+39
+40
+41
+43
+46
+49
+53
+56
+59
+61
+65
+67
+70
+72
+74
+77
+78
+80
+82
+83
+85
+86
+87
+88
+89
+90
+90
+91
+92
+92
+92
+93
+93
+93
+94
+95
+97
+99
+101
+104
+109
+113
+117
+122
+127
+133
+136
+139
+141
+143
+142
+141
+136
+129
+121
+109
+86
+66
+52
+49
+48
+47
+44
+40
+38
+38
+41
+52
+67
+81
+87
+88
+86
+84
+80
+74
+70
+66
+63
+59
+64
+82
+110
+143
+175
+202
+208
+207
+198
+183
+150
+124
+101
+82
+67
+56
+53
+52
+51
+50
+49
+49
+49
+49
+49
+49
+49
+49
+50
+50
+51
+51
+51
+51
+52
+52
+51
+51
+51
+51
+51
+50
+50
+50
+50
+49
+49
+49
+50
+51
+53
+56
+60
+66
+73
+86
+96
+106
+116
+125
+133
+135
+135
+134
+130
+120
+109
+96
+84
+73
+64
+61
+59
+59
+59
+60
+61
+62
+64
+65
+67
+68
+69
+69
+69
+69
+68
+68
+67
+66
+65
+65
+64
+63
+63
+62
+62
+64
+66
+70
+72
+72
+72
+71
+69
+69
+70
+71
+72
+72
+74
+78
+82
+83
+83
+79
+80
+92
+118
+158
+172
+171
+164
+142
+95
+29
+10
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+36
+34
+31
+28
+27
+24
+23
+22
+21
+21
+20
+20
+19
+17
+16
+14
+11
+9
+7
+5
+4
+3
+3
+4
+4
+5
+8
+15
+29
+52
+83
+90
+93
+93
+93
+90
+83
+73
+63
+55
+50
+49
+48
+48
+49
+50
+51
+51
+51
+49
+46
+41
+37
+36
+37
+39
+42
+45
+49
+54
+60
+64
+67
+70
+73
+75
+77
+79
+81
+82
+84
+86
+88
+89
+91
+93
+94
+96
+97
+99
+100
+102
+103
+105
+106
+108
+110
+111
+113
+115
+117
+120
+123
+126
+130
+135
+139
+143
+146
+150
+153
+156
+157
+159
+159
+158
+156
+153
+147
+137
+126
+105
+81
+60
+50
+48
+45
+40
+36
+35
+36
+41
+55
+70
+83
+88
+88
+87
+85
+82
+77
+72
+69
+65
+60
+60
+66
+85
+114
+148
+186
+201
+208
+208
+201
+178
+155
+130
+106
+85
+66
+59
+55
+52
+51
+50
+50
+49
+49
+49
+49
+49
+49
+49
+49
+49
+48
+48
+48
+48
+49
+49
+49
+49
+49
+49
+49
+50
+50
+51
+52
+54
+56
+59
+63
+70
+77
+85
+94
+105
+119
+127
+134
+137
+138
+136
+133
+128
+122
+113
+95
+82
+72
+66
+62
+60
+60
+59
+60
+61
+62
+64
+65
+67
+68
+70
+70
+70
+70
+70
+69
+68
+68
+67
+66
+65
+65
+64
+63
+63
+63
+64
+66
+68
+71
+72
+72
+71
+70
+69
+69
+71
+73
+73
+74
+74
+78
+81
+82
+81
+79
+80
+92
+119
+160
+172
+172
+165
+144
+100
+31
+11
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+36
+34
+31
+28
+27
+25
+25
+24
+24
+24
+24
+24
+24
+24
+23
+22
+20
+17
+13
+8
+5
+4
+4
+4
+5
+7
+10
+18
+33
+56
+83
+89
+92
+93
+93
+91
+86
+77
+65
+56
+51
+49
+48
+48
+50
+52
+52
+48
+41
+34
+32
+33
+34
+36
+38
+43
+49
+54
+60
+64
+69
+72
+74
+76
+78
+80
+82
+83
+85
+86
+89
+91
+92
+94
+96
+98
+100
+102
+103
+105
+107
+109
+111
+112
+114
+117
+119
+121
+124
+126
+131
+135
+139
+143
+147
+152
+155
+158
+161
+164
+167
+168
+169
+170
+171
+171
+169
+167
+163
+154
+141
+126
+100
+73
+52
+49
+45
+40
+36
+35
+36
+44
+58
+73
+84
+88
+88
+87
+86
+83
+79
+74
+71
+67
+62
+60
+59
+66
+84
+115
+162
+188
+204
+211
+212
+201
+184
+162
+137
+112
+84
+69
+60
+55
+53
+51
+51
+50
+50
+49
+49
+49
+48
+48
+48
+48
+48
+48
+48
+48
+48
+49
+49
+49
+50
+50
+51
+52
+53
+55
+60
+66
+74
+84
+95
+110
+121
+130
+136
+140
+141
+142
+141
+140
+137
+131
+120
+106
+92
+78
+67
+64
+62
+61
+60
+60
+60
+61
+62
+63
+66
+68
+69
+70
+71
+71
+71
+71
+70
+70
+69
+68
+68
+67
+66
+65
+65
+64
+64
+64
+64
+66
+68
+71
+72
+72
+72
+71
+70
+70
+70
+73
+74
+75
+75
+75
+77
+79
+81
+80
+78
+79
+93
+120
+161
+173
+172
+166
+146
+103
+34
+12
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+36
+33
+30
+27
+27
+25
+25
+25
+25
+25
+25
+26
+25
+25
+25
+24
+24
+24
+24
+23
+17
+12
+9
+8
+12
+20
+27
+35
+44
+58
+79
+87
+91
+91
+91
+91
+89
+84
+75
+63
+54
+53
+53
+54
+54
+51
+43
+36
+31
+31
+33
+35
+36
+37
+40
+46
+52
+58
+64
+69
+74
+77
+80
+82
+85
+88
+91
+93
+96
+99
+102
+105
+107
+110
+112
+115
+117
+119
+121
+123
+125
+127
+129
+131
+133
+136
+139
+142
+145
+149
+155
+159
+162
+165
+168
+171
+172
+174
+175
+176
+177
+178
+178
+179
+179
+179
+178
+178
+176
+173
+161
+150
+130
+102
+68
+52
+48
+42
+37
+35
+37
+47
+61
+75
+85
+89
+90
+89
+87
+84
+80
+77
+74
+71
+67
+62
+60
+59
+62
+72
+113
+148
+178
+200
+210
+212
+207
+198
+184
+164
+134
+112
+92
+75
+64
+57
+55
+53
+52
+51
+51
+50
+50
+50
+50
+50
+51
+51
+52
+53
+55
+58
+61
+65
+71
+80
+89
+98
+107
+117
+129
+135
+140
+142
+144
+145
+146
+146
+145
+143
+139
+133
+123
+111
+98
+81
+73
+68
+64
+63
+62
+61
+61
+61
+61
+62
+63
+65
+67
+69
+71
+72
+72
+72
+72
+72
+71
+71
+70
+70
+69
+68
+68
+67
+66
+65
+65
+65
+65
+65
+67
+69
+71
+72
+72
+72
+71
+71
+70
+70
+72
+76
+77
+78
+77
+76
+77
+78
+79
+79
+78
+79
+93
+121
+163
+174
+173
+167
+148
+107
+37
+14
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+37
+33
+30
+27
+26
+25
+25
+26
+26
+26
+27
+27
+28
+27
+27
+25
+24
+24
+24
+24
+23
+22
+21
+20
+22
+35
+45
+52
+57
+63
+77
+84
+89
+90
+90
+90
+89
+86
+81
+72
+63
+60
+58
+57
+54
+44
+36
+32
+32
+33
+35
+36
+37
+38
+40
+48
+55
+63
+69
+75
+81
+84
+88
+91
+94
+98
+101
+104
+107
+110
+114
+116
+119
+121
+124
+127
+129
+131
+134
+136
+139
+142
+145
+148
+152
+157
+161
+165
+168
+171
+174
+175
+176
+177
+177
+178
+179
+179
+179
+180
+180
+180
+180
+180
+180
+180
+180
+180
+180
+179
+173
+164
+150
+126
+92
+59
+51
+45
+41
+38
+39
+47
+61
+75
+86
+91
+91
+91
+89
+86
+81
+77
+75
+73
+70
+66
+62
+60
+59
+62
+80
+109
+140
+170
+195
+209
+210
+207
+201
+193
+175
+157
+139
+121
+104
+87
+78
+71
+67
+64
+62
+62
+63
+64
+66
+70
+74
+79
+85
+91
+99
+106
+112
+118
+123
+128
+131
+135
+138
+141
+143
+144
+144
+144
+143
+139
+134
+127
+120
+112
+100
+92
+85
+79
+74
+68
+65
+63
+62
+62
+61
+61
+62
+63
+64
+66
+68
+70
+71
+72
+73
+73
+73
+73
+73
+72
+72
+71
+71
+70
+69
+68
+68
+67
+67
+66
+66
+67
+67
+68
+70
+71
+72
+72
+72
+72
+71
+71
+71
+71
+74
+79
+80
+80
+79
+77
+77
+78
+78
+78
+77
+79
+94
+123
+165
+174
+173
+168
+150
+110
+39
+14
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+38
+34
+30
+27
+26
+25
+25
+26
+26
+27
+27
+27
+28
+29
+29
+27
+25
+24
+24
+24
+24
+25
+27
+31
+35
+46
+57
+66
+72
+75
+81
+85
+87
+88
+89
+89
+89
+88
+85
+79
+70
+66
+62
+56
+49
+36
+32
+31
+32
+34
+36
+37
+38
+39
+41
+50
+59
+67
+75
+81
+87
+90
+94
+98
+101
+105
+109
+112
+115
+118
+121
+124
+126
+129
+131
+135
+137
+140
+143
+146
+150
+154
+158
+163
+167
+172
+175
+178
+179
+181
+181
+181
+181
+181
+181
+181
+181
+181
+181
+181
+181
+181
+181
+181
+181
+181
+181
+181
+181
+181
+179
+174
+165
+148
+118
+75
+59
+49
+43
+41
+41
+48
+60
+74
+85
+92
+93
+92
+90
+87
+82
+78
+76
+74
+72
+69
+65
+62
+59
+58
+64
+80
+103
+131
+162
+191
+202
+207
+207
+205
+196
+187
+175
+163
+149
+132
+122
+114
+108
+104
+101
+101
+103
+104
+107
+112
+116
+120
+124
+128
+133
+136
+139
+141
+143
+144
+144
+144
+142
+140
+135
+130
+126
+121
+116
+108
+102
+96
+90
+84
+76
+71
+68
+66
+64
+63
+62
+62
+62
+62
+63
+64
+65
+67
+69
+71
+72
+73
+74
+74
+74
+74
+74
+74
+74
+73
+72
+72
+71
+71
+70
+69
+69
+68
+68
+68
+68
+69
+69
+70
+71
+72
+72
+72
+72
+72
+71
+71
+71
+72
+77
+82
+84
+84
+82
+77
+77
+77
+77
+77
+77
+78
+95
+125
+166
+175
+174
+168
+151
+113
+41
+15
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+40
+36
+32
+28
+26
+25
+25
+25
+26
+26
+26
+26
+27
+29
+30
+29
+26
+24
+23
+23
+23
+24
+28
+34
+39
+47
+59
+71
+81
+85
+86
+86
+87
+87
+88
+88
+88
+87
+86
+83
+76
+69
+62
+53
+42
+32
+31
+31
+32
+35
+37
+38
+39
+40
+43
+54
+64
+72
+79
+85
+91
+95
+99
+103
+107
+112
+115
+118
+121
+124
+128
+131
+133
+136
+139
+143
+146
+149
+152
+155
+161
+166
+171
+175
+178
+182
+183
+183
+183
+183
+182
+182
+182
+181
+181
+181
+181
+182
+182
+182
+182
+182
+182
+182
+182
+181
+181
+181
+181
+181
+181
+180
+176
+165
+145
+98
+72
+55
+47
+44
+44
+49
+59
+73
+85
+93
+94
+94
+92
+89
+84
+80
+77
+75
+73
+71
+69
+65
+61
+58
+59
+63
+75
+94
+120
+158
+181
+195
+203
+205
+204
+201
+197
+191
+184
+173
+165
+158
+153
+148
+145
+145
+145
+147
+148
+150
+151
+152
+151
+151
+149
+146
+144
+140
+137
+133
+130
+126
+121
+116
+108
+102
+96
+89
+83
+76
+72
+69
+67
+65
+64
+64
+63
+63
+63
+63
+63
+64
+64
+65
+67
+69
+70
+72
+73
+75
+75
+76
+76
+76
+75
+75
+75
+75
+74
+74
+73
+72
+72
+72
+71
+70
+70
+70
+70
+70
+70
+71
+71
+72
+72
+72
+72
+72
+72
+72
+71
+71
+72
+73
+81
+86
+88
+87
+86
+78
+77
+76
+76
+76
+76
+78
+96
+127
+168
+176
+174
+169
+152
+115
+43
+16
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+45
+42
+36
+30
+26
+24
+24
+24
+24
+25
+24
+24
+26
+28
+29
+29
+26
+24
+23
+23
+24
+24
+23
+23
+24
+32
+48
+64
+77
+85
+89
+89
+89
+88
+88
+87
+86
+86
+85
+83
+77
+69
+59
+48
+36
+31
+31
+31
+33
+36
+39
+40
+41
+42
+44
+57
+67
+76
+83
+89
+95
+100
+105
+109
+113
+118
+122
+125
+128
+132
+136
+139
+142
+145
+148
+153
+157
+160
+165
+169
+177
+181
+184
+186
+186
+185
+184
+184
+183
+182
+181
+181
+181
+181
+181
+182
+182
+183
+183
+184
+185
+185
+184
+184
+183
+182
+181
+181
+181
+181
+182
+182
+181
+178
+168
+127
+91
+66
+51
+46
+46
+49
+58
+71
+84
+93
+95
+95
+94
+91
+86
+82
+79
+76
+73
+72
+71
+68
+65
+60
+59
+59
+62
+68
+81
+112
+141
+167
+188
+199
+203
+201
+199
+197
+194
+190
+187
+183
+180
+176
+173
+170
+167
+165
+162
+159
+157
+154
+151
+148
+142
+135
+127
+119
+110
+98
+90
+83
+78
+73
+69
+68
+66
+65
+65
+64
+64
+64
+64
+63
+63
+63
+63
+63
+64
+65
+66
+68
+69
+71
+73
+74
+75
+76
+77
+77
+77
+77
+77
+77
+76
+76
+75
+75
+75
+74
+73
+73
+73
+72
+72
+72
+72
+72
+72
+72
+72
+72
+72
+72
+72
+72
+72
+72
+72
+72
+72
+72
+73
+75
+86
+90
+92
+92
+90
+80
+77
+76
+76
+76
+76
+78
+97
+129
+170
+176
+174
+169
+152
+117
+45
+17
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+26
+33
+36
+37
+36
+34
+32
+30
+30
+30
+32
+32
+32
+30
+29
+23
+22
+22
+22
+23
+26
+28
+28
+28
+26
+25
+27
+33
+44
+59
+77
+83
+87
+89
+89
+88
+87
+86
+84
+82
+77
+69
+59
+48
+37
+32
+32
+33
+36
+41
+42
+42
+42
+44
+49
+65
+76
+85
+92
+98
+106
+111
+116
+120
+125
+130
+134
+137
+141
+144
+149
+153
+156
+160
+163
+169
+173
+179
+184
+189
+191
+190
+190
+188
+187
+183
+181
+180
+180
+180
+180
+181
+182
+184
+186
+189
+191
+194
+196
+198
+199
+199
+199
+198
+196
+192
+188
+184
+182
+181
+181
+181
+182
+182
+181
+166
+131
+95
+66
+50
+47
+48
+54
+65
+80
+93
+96
+97
+97
+94
+89
+85
+81
+78
+75
+72
+72
+71
+69
+66
+61
+60
+59
+60
+61
+68
+84
+105
+128
+151
+175
+185
+191
+192
+192
+189
+186
+183
+179
+176
+171
+167
+163
+158
+152
+141
+131
+120
+108
+97
+84
+78
+73
+70
+67
+66
+65
+65
+64
+64
+64
+64
+64
+64
+65
+65
+65
+65
+66
+66
+67
+69
+70
+71
+73
+74
+75
+76
+77
+77
+78
+79
+79
+79
+79
+79
+78
+78
+77
+77
+76
+76
+75
+75
+75
+74
+74
+74
+74
+74
+73
+73
+73
+73
+73
+72
+72
+72
+72
+72
+72
+72
+72
+72
+72
+72
+73
+74
+77
+81
+92
+97
+99
+98
+96
+84
+78
+76
+75
+75
+75
+78
+99
+132
+172
+177
+175
+169
+153
+119
+47
+18
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+16
+18
+19
+20
+21
+21
+21
+21
+22
+22
+22
+22
+22
+22
+21
+21
+21
+23
+25
+29
+34
+36
+36
+36
+35
+30
+29
+29
+33
+37
+46
+53
+61
+70
+79
+86
+87
+86
+85
+83
+78
+72
+63
+52
+41
+37
+38
+41
+44
+45
+43
+42
+43
+47
+56
+73
+83
+91
+98
+104
+112
+117
+121
+126
+130
+136
+140
+144
+148
+151
+156
+160
+163
+168
+172
+179
+184
+188
+191
+192
+192
+189
+186
+183
+180
+179
+179
+179
+180
+182
+185
+188
+190
+193
+196
+200
+203
+205
+207
+209
+210
+211
+211
+210
+209
+206
+202
+197
+192
+186
+182
+181
+182
+182
+182
+177
+157
+126
+92
+62
+49
+49
+52
+60
+74
+90
+96
+99
+99
+98
+92
+87
+83
+79
+76
+73
+72
+72
+71
+69
+65
+63
+61
+59
+59
+61
+67
+76
+89
+104
+125
+138
+149
+158
+164
+166
+166
+163
+159
+154
+145
+136
+127
+117
+107
+96
+89
+83
+79
+75
+71
+70
+68
+68
+67
+67
+68
+69
+69
+70
+71
+72
+72
+73
+74
+74
+75
+75
+76
+77
+77
+78
+78
+79
+79
+80
+80
+80
+80
+81
+80
+80
+80
+80
+79
+79
+78
+78
+77
+77
+76
+76
+75
+75
+75
+75
+74
+74
+74
+74
+74
+73
+73
+73
+73
+73
+73
+73
+73
+73
+73
+72
+72
+72
+73
+73
+75
+78
+81
+86
+97
+103
+104
+104
+101
+87
+80
+76
+75
+74
+75
+78
+100
+134
+173
+178
+175
+170
+154
+120
+48
+18
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+19
+19
+19
+19
+19
+20
+20
+20
+20
+20
+20
+20
+21
+22
+23
+25
+27
+30
+34
+37
+41
+42
+43
+42
+42
+38
+35
+33
+32
+31
+34
+37
+42
+49
+57
+65
+72
+78
+82
+82
+80
+76
+70
+63
+53
+50
+51
+52
+51
+47
+43
+42
+46
+53
+66
+81
+89
+97
+104
+110
+117
+122
+127
+132
+136
+143
+147
+151
+155
+159
+164
+167
+172
+178
+183
+189
+192
+193
+194
+192
+187
+182
+179
+178
+176
+178
+180
+183
+185
+188
+191
+194
+197
+200
+203
+207
+210
+212
+214
+215
+217
+217
+217
+217
+216
+215
+212
+208
+203
+197
+188
+184
+182
+182
+182
+181
+173
+153
+122
+86
+56
+51
+50
+55
+65
+85
+93
+98
+100
+100
+96
+90
+85
+81
+77
+74
+73
+72
+71
+70
+68
+66
+64
+61
+59
+58
+60
+63
+68
+75
+87
+97
+106
+115
+122
+127
+127
+125
+121
+116
+107
+99
+92
+86
+80
+74
+72
+70
+70
+70
+71
+72
+73
+74
+75
+76
+77
+77
+78
+79
+79
+80
+80
+81
+81
+81
+82
+82
+82
+82
+83
+83
+83
+83
+83
+82
+82
+82
+82
+82
+81
+81
+80
+80
+79
+78
+78
+78
+77
+77
+76
+76
+76
+75
+75
+75
+75
+75
+74
+74
+74
+74
+73
+73
+73
+73
+73
+73
+73
+73
+73
+73
+73
+73
+74
+75
+78
+82
+87
+92
+103
+108
+110
+110
+107
+91
+82
+77
+75
+74
+74
+78
+101
+136
+175
+179
+175
+170
+154
+121
+49
+19
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+29
+28
+28
+27
+26
+26
+25
+25
+25
+25
+25
+26
+27
+28
+30
+33
+37
+40
+42
+45
+46
+47
+47
+47
+47
+46
+43
+40
+38
+35
+34
+34
+33
+34
+37
+42
+51
+62
+70
+73
+75
+76
+74
+70
+64
+61
+59
+57
+52
+46
+42
+45
+52
+63
+76
+89
+96
+103
+110
+116
+123
+129
+134
+139
+144
+150
+154
+159
+163
+167
+172
+177
+183
+189
+193
+196
+196
+194
+191
+186
+179
+175
+174
+175
+177
+181
+184
+188
+191
+193
+196
+199
+202
+205
+209
+213
+215
+216
+218
+219
+219
+220
+220
+220
+220
+220
+219
+216
+213
+209
+199
+190
+185
+183
+182
+182
+181
+171
+151
+118
+72
+58
+51
+52
+57
+76
+88
+96
+101
+102
+100
+95
+89
+83
+78
+75
+74
+73
+72
+71
+70
+69
+67
+64
+61
+59
+59
+59
+60
+61
+64
+68
+73
+78
+84
+88
+88
+86
+84
+80
+74
+71
+70
+69
+69
+70
+71
+72
+73
+75
+77
+79
+81
+82
+83
+84
+85
+85
+85
+85
+85
+85
+85
+85
+85
+85
+85
+85
+85
+85
+85
+85
+84
+84
+84
+83
+83
+82
+82
+81
+81
+80
+80
+79
+79
+78
+78
+77
+77
+77
+76
+76
+76
+76
+75
+75
+75
+75
+75
+75
+74
+74
+74
+74
+73
+73
+73
+73
+73
+73
+74
+74
+74
+75
+76
+78
+82
+87
+93
+98
+109
+114
+116
+116
+113
+96
+84
+78
+75
+74
+74
+78
+103
+139
+176
+179
+175
+170
+154
+122
+50
+19
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+38
+38
+38
+37
+37
+36
+36
+35
+35
+35
+35
+36
+37
+39
+40
+43
+45
+46
+47
+48
+50
+50
+50
+50
+50
+49
+48
+46
+44
+42
+39
+37
+35
+34
+34
+34
+35
+37
+42
+48
+59
+65
+66
+65
+63
+58
+52
+46
+42
+40
+42
+51
+64
+76
+86
+96
+103
+110
+117
+123
+130
+136
+141
+147
+152
+158
+163
+167
+171
+175
+182
+188
+194
+198
+199
+198
+195
+189
+182
+173
+172
+172
+174
+177
+183
+189
+190
+192
+193
+194
+198
+201
+205
+210
+213
+217
+219
+220
+220
+221
+221
+221
+221
+221
+221
+221
+222
+221
+219
+216
+210
+202
+193
+185
+183
+183
+182
+181
+172
+153
+101
+72
+56
+50
+51
+63
+80
+92
+99
+103
+103
+100
+94
+87
+80
+76
+74
+73
+72
+71
+71
+71
+70
+68
+65
+61
+59
+59
+59
+60
+60
+61
+62
+63
+64
+65
+65
+65
+65
+65
+65
+66
+67
+69
+71
+74
+77
+79
+81
+83
+84
+85
+85
+86
+86
+86
+86
+86
+86
+86
+86
+86
+86
+86
+86
+85
+85
+85
+85
+85
+85
+85
+84
+84
+84
+83
+82
+82
+81
+80
+80
+79
+79
+78
+78
+78
+77
+77
+77
+77
+76
+76
+76
+76
+76
+76
+76
+76
+76
+75
+75
+75
+75
+75
+75
+75
+75
+75
+75
+75
+75
+76
+77
+78
+79
+83
+88
+94
+100
+105
+114
+120
+122
+122
+120
+101
+87
+79
+75
+73
+74
+78
+104
+141
+177
+180
+176
+170
+155
+122
+50
+19
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+51
+51
+50
+50
+50
+49
+49
+49
+49
+49
+49
+49
+50
+51
+52
+54
+55
+56
+57
+58
+60
+60
+60
+60
+60
+59
+57
+56
+54
+52
+50
+48
+46
+44
+42
+39
+38
+37
+37
+37
+38
+39
+39
+39
+39
+39
+39
+40
+42
+46
+61
+72
+81
+89
+95
+106
+113
+120
+126
+131
+139
+145
+150
+155
+161
+167
+171
+176
+180
+186
+195
+200
+201
+201
+199
+190
+177
+170
+167
+168
+172
+179
+184
+188
+190
+191
+191
+192
+193
+196
+203
+209
+213
+216
+218
+219
+219
+219
+218
+216
+213
+213
+213
+214
+216
+219
+221
+222
+223
+223
+219
+215
+207
+198
+188
+183
+183
+183
+181
+177
+147
+110
+79
+58
+50
+51
+62
+77
+91
+100
+104
+104
+102
+97
+90
+80
+76
+74
+72
+72
+71
+71
+71
+70
+69
+67
+64
+63
+61
+61
+61
+60
+60
+60
+61
+61
+62
+63
+64
+65
+68
+71
+73
+75
+76
+77
+76
+75
+73
+70
+67
+66
+66
+67
+68
+69
+71
+74
+77
+79
+81
+81
+82
+82
+83
+83
+83
+83
+83
+83
+82
+82
+82
+82
+81
+81
+80
+80
+80
+79
+79
+79
+78
+78
+78
+78
+78
+78
+78
+79
+79
+80
+80
+80
+80
+80
+80
+80
+80
+80
+80
+80
+80
+80
+80
+80
+79
+80
+80
+80
+81
+82
+83
+84
+87
+92
+97
+103
+109
+113
+121
+127
+129
+130
+128
+110
+93
+82
+76
+73
+74
+79
+106
+144
+178
+180
+176
+170
+155
+123
+51
+20
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+60
+60
+60
+60
+59
+59
+59
+59
+58
+58
+59
+59
+59
+60
+61
+62
+63
+64
+65
+65
+66
+67
+67
+67
+66
+65
+64
+63
+61
+60
+58
+56
+55
+53
+51
+49
+48
+46
+45
+43
+43
+43
+43
+43
+44
+46
+48
+52
+58
+65
+76
+83
+90
+97
+104
+114
+121
+127
+132
+138
+146
+152
+157
+162
+168
+174
+179
+184
+190
+197
+201
+202
+201
+196
+186
+171
+168
+167
+168
+173
+183
+186
+188
+189
+190
+189
+189
+191
+194
+200
+207
+211
+214
+216
+217
+215
+212
+208
+203
+199
+196
+194
+195
+196
+198
+203
+209
+215
+219
+222
+222
+220
+216
+208
+199
+187
+184
+183
+182
+181
+169
+141
+109
+80
+58
+50
+54
+63
+76
+92
+102
+103
+103
+101
+97
+88
+82
+77
+74
+72
+71
+71
+71
+70
+70
+69
+68
+66
+65
+64
+62
+61
+61
+61
+61
+62
+63
+65
+67
+70
+73
+74
+74
+73
+70
+65
+61
+57
+54
+52
+50
+49
+48
+47
+47
+49
+50
+52
+54
+56
+62
+66
+71
+74
+77
+79
+80
+81
+81
+81
+81
+81
+81
+81
+81
+80
+80
+80
+80
+79
+79
+79
+80
+80
+81
+82
+82
+83
+84
+85
+86
+86
+86
+87
+87
+87
+87
+88
+88
+87
+87
+87
+87
+86
+86
+86
+86
+86
+86
+86
+87
+88
+89
+91
+95
+99
+105
+110
+115
+118
+124
+131
+134
+135
+134
+117
+98
+84
+77
+73
+74
+79
+108
+145
+179
+180
+176
+170
+155
+123
+51
+20
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+70
+70
+69
+69
+69
+69
+68
+68
+68
+68
+68
+68
+69
+69
+70
+71
+71
+72
+72
+73
+73
+73
+73
+73
+73
+72
+71
+70
+69
+67
+65
+64
+63
+61
+60
+58
+57
+56
+55
+53
+52
+52
+52
+53
+55
+58
+62
+66
+72
+78
+86
+92
+99
+106
+113
+122
+128
+134
+139
+145
+153
+159
+164
+170
+174
+181
+187
+193
+198
+203
+203
+200
+191
+181
+171
+163
+165
+170
+176
+182
+188
+189
+189
+188
+186
+186
+187
+191
+196
+202
+209
+211
+213
+213
+211
+206
+200
+195
+190
+186
+184
+184
+185
+186
+189
+194
+198
+204
+210
+216
+222
+223
+221
+217
+209
+196
+188
+185
+183
+183
+179
+163
+138
+107
+77
+55
+52
+54
+63
+77
+95
+100
+102
+102
+100
+95
+89
+84
+79
+75
+72
+72
+71
+71
+70
+70
+69
+68
+67
+66
+64
+63
+62
+62
+63
+65
+67
+69
+71
+73
+74
+72
+69
+65
+61
+57
+55
+53
+53
+52
+52
+53
+53
+52
+51
+49
+47
+45
+44
+44
+47
+50
+54
+57
+61
+67
+70
+74
+76
+78
+79
+80
+80
+80
+80
+80
+80
+80
+80
+81
+81
+82
+83
+84
+86
+88
+89
+90
+91
+92
+93
+94
+94
+94
+95
+95
+95
+95
+95
+95
+95
+95
+94
+94
+94
+93
+93
+93
+93
+93
+94
+95
+97
+99
+102
+106
+111
+115
+119
+122
+127
+134
+138
+140
+139
+125
+103
+88
+78
+74
+74
+80
+109
+147
+180
+181
+176
+170
+154
+123
+51
+20
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+79
+79
+79
+79
+79
+78
+78
+78
+78
+78
+78
+78
+78
+78
+79
+79
+79
+80
+80
+80
+81
+81
+80
+80
+80
+79
+78
+77
+76
+75
+73
+72
+71
+70
+69
+68
+67
+66
+65
+64
+64
+64
+65
+66
+68
+72
+75
+80
+84
+89
+95
+102
+109
+115
+122
+129
+135
+141
+146
+152
+160
+166
+171
+177
+181
+189
+195
+201
+205
+205
+200
+190
+177
+165
+160
+163
+170
+178
+185
+189
+189
+188
+186
+184
+183
+183
+186
+191
+198
+204
+208
+210
+210
+208
+203
+195
+189
+184
+180
+178
+178
+180
+181
+183
+186
+189
+192
+195
+200
+207
+218
+222
+223
+222
+218
+206
+195
+188
+185
+184
+183
+178
+162
+137
+105
+69
+57
+51
+53
+61
+83
+94
+99
+101
+101
+99
+95
+91
+86
+81
+76
+74
+73
+72
+71
+71
+70
+70
+69
+68
+66
+66
+66
+66
+67
+70
+72
+74
+74
+74
+71
+66
+61
+57
+54
+53
+54
+55
+57
+59
+62
+64
+66
+67
+66
+62
+58
+53
+48
+44
+41
+40
+40
+42
+45
+51
+56
+61
+65
+69
+72
+74
+76
+77
+78
+79
+80
+80
+81
+82
+83
+85
+87
+89
+91
+94
+95
+97
+98
+99
+100
+101
+101
+102
+102
+103
+103
+103
+103
+103
+102
+102
+102
+102
+101
+101
+101
+100
+101
+101
+101
+102
+104
+106
+109
+113
+116
+120
+123
+125
+129
+137
+142
+144
+144
+133
+110
+92
+79
+74
+74
+80
+110
+149
+180
+181
+176
+169
+154
+123
+50
+19
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+89
+89
+88
+88
+88
+88
+88
+87
+87
+87
+87
+87
+87
+87
+87
+88
+88
+88
+88
+88
+88
+88
+88
+87
+87
+86
+85
+84
+83
+82
+81
+80
+79
+78
+77
+76
+76
+75
+75
+75
+75
+75
+76
+78
+80
+83
+86
+90
+94
+99
+107
+113
+119
+124
+129
+137
+142
+148
+153
+159
+167
+173
+178
+183
+188
+198
+204
+206
+206
+204
+188
+168
+159
+157
+159
+171
+182
+188
+190
+189
+187
+183
+181
+180
+180
+181
+185
+192
+198
+204
+206
+206
+205
+201
+196
+187
+182
+178
+176
+176
+177
+179
+181
+183
+186
+189
+192
+195
+198
+200
+209
+217
+222
+224
+223
+216
+205
+195
+187
+184
+184
+183
+177
+163
+137
+93
+70
+55
+49
+51
+64
+82
+94
+99
+99
+98
+96
+94
+92
+88
+83
+80
+76
+74
+73
+72
+71
+71
+71
+70
+70
+71
+72
+73
+75
+76
+76
+75
+74
+71
+62
+56
+53
+52
+52
+53
+53
+55
+56
+59
+63
+67
+72
+76
+80
+82
+80
+75
+68
+59
+48
+42
+39
+37
+37
+38
+39
+42
+45
+50
+57
+62
+66
+70
+73
+76
+78
+80
+81
+82
+84
+87
+89
+92
+95
+98
+99
+101
+102
+103
+104
+105
+106
+107
+108
+108
+109
+109
+109
+109
+109
+109
+108
+108
+108
+108
+107
+107
+107
+108
+108
+109
+110
+112
+114
+117
+119
+122
+125
+128
+131
+139
+145
+149
+149
+141
+117
+97
+81
+75
+75
+81
+111
+150
+181
+181
+176
+170
+154
+122
+50
+19
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+101
+101
+101
+101
+101
+101
+100
+100
+100
+100
+100
+99
+99
+99
+99
+99
+99
+99
+99
+99
+98
+98
+98
+97
+97
+96
+95
+94
+93
+92
+91
+90
+90
+89
+88
+88
+87
+87
+87
+87
+88
+89
+90
+92
+94
+98
+101
+105
+109
+113
+119
+124
+129
+134
+140
+147
+152
+157
+163
+169
+177
+182
+187
+193
+200
+207
+208
+206
+198
+182
+154
+153
+155
+161
+176
+189
+190
+190
+188
+183
+178
+178
+179
+179
+179
+181
+186
+192
+199
+202
+203
+203
+200
+195
+187
+178
+174
+172
+172
+174
+178
+182
+187
+192
+195
+198
+199
+199
+200
+201
+204
+209
+216
+222
+224
+223
+217
+207
+197
+187
+184
+184
+183
+179
+170
+135
+104
+78
+59
+49
+50
+59
+74
+88
+96
+95
+94
+94
+92
+91
+89
+87
+85
+83
+81
+79
+78
+78
+77
+77
+77
+78
+78
+78
+78
+77
+75
+71
+65
+57
+52
+51
+51
+52
+52
+52
+53
+53
+53
+53
+57
+63
+71
+78
+85
+91
+92
+91
+87
+81
+71
+63
+56
+49
+44
+39
+38
+38
+38
+39
+40
+42
+45
+49
+53
+60
+66
+71
+75
+79
+83
+86
+89
+92
+95
+99
+100
+102
+103
+104
+106
+107
+108
+109
+110
+111
+112
+112
+112
+113
+113
+113
+113
+113
+113
+112
+112
+113
+113
+113
+114
+115
+115
+116
+118
+120
+121
+124
+127
+130
+133
+141
+148
+153
+154
+149
+128
+105
+85
+76
+75
+82
+113
+152
+182
+182
+176
+170
+154
+121
+48
+19
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+111
+111
+111
+110
+110
+110
+110
+110
+109
+109
+109
+109
+108
+108
+108
+108
+107
+107
+107
+107
+106
+106
+105
+105
+104
+103
+103
+102
+101
+100
+99
+98
+98
+97
+96
+96
+96
+96
+96
+97
+98
+99
+100
+102
+104
+108
+111
+114
+118
+122
+128
+133
+138
+143
+147
+154
+159
+164
+170
+176
+183
+188
+194
+201
+207
+208
+206
+193
+176
+157
+150
+154
+165
+178
+187
+190
+189
+186
+181
+178
+177
+177
+177
+178
+178
+180
+187
+193
+198
+201
+202
+201
+196
+189
+180
+173
+171
+171
+174
+178
+188
+196
+202
+207
+211
+213
+213
+212
+210
+207
+206
+209
+213
+218
+223
+225
+222
+215
+206
+195
+186
+185
+184
+183
+179
+160
+133
+105
+80
+61
+49
+52
+59
+71
+84
+92
+92
+91
+90
+88
+88
+87
+86
+85
+83
+82
+81
+81
+80
+80
+80
+80
+79
+79
+78
+74
+69
+63
+57
+52
+51
+51
+51
+52
+52
+52
+52
+53
+53
+53
+56
+61
+68
+77
+87
+96
+100
+100
+98
+93
+84
+76
+68
+61
+54
+48
+45
+42
+41
+39
+40
+41
+43
+46
+49
+55
+61
+66
+71
+76
+81
+85
+89
+92
+95
+99
+101
+102
+104
+105
+107
+108
+110
+111
+112
+113
+113
+114
+114
+114
+114
+114
+114
+114
+114
+114
+114
+114
+114
+115
+115
+116
+117
+118
+119
+121
+122
+125
+129
+132
+136
+142
+150
+156
+158
+155
+136
+112
+89
+77
+76
+82
+114
+153
+182
+182
+176
+170
+153
+119
+47
+18
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+120
+120
+120
+120
+120
+120
+119
+119
+119
+119
+118
+118
+118
+117
+117
+116
+116
+116
+115
+115
+114
+114
+113
+112
+112
+111
+110
+109
+108
+108
+107
+106
+105
+105
+105
+104
+104
+105
+105
+106
+107
+108
+110
+112
+114
+117
+121
+124
+128
+132
+137
+141
+146
+150
+155
+161
+166
+171
+177
+182
+189
+196
+202
+207
+209
+206
+191
+173
+157
+147
+153
+166
+178
+187
+191
+189
+185
+180
+177
+176
+176
+176
+177
+178
+178
+181
+188
+194
+198
+200
+200
+197
+191
+183
+175
+171
+171
+173
+179
+187
+200
+208
+214
+219
+222
+223
+223
+221
+220
+217
+212
+211
+213
+216
+221
+225
+224
+220
+214
+204
+191
+187
+185
+184
+183
+175
+157
+133
+106
+81
+58
+52
+52
+58
+69
+82
+87
+87
+86
+85
+84
+84
+84
+84
+84
+83
+82
+82
+81
+81
+81
+80
+78
+77
+74
+67
+61
+56
+52
+50
+50
+50
+51
+51
+51
+51
+51
+52
+53
+53
+55
+60
+67
+77
+87
+100
+105
+107
+106
+103
+94
+86
+78
+70
+63
+56
+52
+48
+46
+44
+43
+43
+43
+45
+48
+54
+59
+64
+69
+74
+80
+85
+89
+92
+96
+99
+102
+104
+106
+107
+110
+111
+113
+114
+115
+116
+117
+117
+117
+117
+117
+117
+116
+116
+116
+116
+116
+116
+116
+116
+117
+118
+118
+119
+120
+123
+124
+127
+131
+135
+139
+144
+152
+159
+162
+159
+145
+120
+94
+78
+77
+83
+115
+153
+182
+182
+177
+170
+153
+118
+46
+17
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+130
+130
+130
+129
+129
+129
+129
+129
+128
+128
+127
+127
+127
+126
+126
+125
+125
+124
+123
+123
+122
+121
+121
+120
+119
+118
+117
+117
+116
+115
+114
+114
+113
+113
+113
+113
+113
+113
+114
+114
+116
+117
+119
+121
+123
+127
+130
+133
+137
+140
+145
+149
+153
+157
+162
+168
+173
+178
+184
+188
+196
+203
+208
+210
+208
+194
+169
+153
+145
+149
+164
+180
+188
+190
+189
+184
+179
+176
+175
+175
+176
+177
+177
+178
+179
+182
+188
+194
+197
+198
+197
+193
+186
+178
+171
+170
+172
+178
+187
+199
+212
+219
+224
+226
+228
+228
+228
+228
+227
+225
+220
+216
+215
+216
+219
+224
+225
+224
+220
+212
+198
+190
+187
+185
+185
+183
+174
+157
+134
+107
+76
+60
+53
+52
+55
+69
+77
+81
+82
+81
+79
+79
+79
+80
+80
+81
+81
+81
+81
+80
+79
+77
+75
+71
+67
+58
+53
+51
+49
+49
+50
+50
+49
+49
+48
+49
+50
+52
+53
+53
+55
+59
+67
+77
+88
+102
+109
+113
+113
+111
+102
+94
+86
+78
+71
+63
+58
+55
+52
+50
+48
+47
+47
+48
+50
+55
+60
+65
+69
+74
+80
+85
+89
+93
+97
+101
+103
+106
+108
+110
+113
+115
+116
+118
+119
+120
+121
+121
+121
+121
+120
+120
+120
+119
+119
+118
+118
+118
+118
+118
+119
+120
+120
+121
+123
+126
+127
+130
+133
+138
+143
+147
+154
+161
+165
+164
+152
+128
+100
+80
+78
+84
+115
+154
+183
+182
+177
+170
+152
+116
+44
+17
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+139
+139
+139
+139
+139
+139
+138
+138
+138
+137
+137
+136
+136
+135
+135
+134
+133
+132
+132
+131
+130
+129
+128
+128
+127
+126
+125
+124
+123
+123
+122
+122
+121
+121
+121
+121
+121
+121
+122
+123
+125
+126
+128
+130
+132
+136
+139
+142
+145
+149
+153
+157
+161
+165
+168
+174
+180
+185
+190
+194
+205
+210
+211
+209
+204
+164
+147
+142
+146
+158
+185
+190
+191
+189
+185
+177
+175
+175
+175
+175
+176
+178
+179
+180
+181
+183
+188
+193
+196
+196
+195
+190
+182
+174
+169
+170
+174
+184
+197
+210
+222
+226
+228
+229
+229
+230
+230
+229
+229
+229
+228
+223
+220
+218
+219
+223
+225
+225
+224
+219
+206
+196
+189
+186
+185
+185
+183
+175
+159
+136
+101
+78
+62
+53
+50
+55
+62
+70
+75
+75
+73
+71
+70
+70
+72
+75
+77
+78
+78
+78
+75
+72
+67
+62
+56
+50
+49
+48
+48
+49
+49
+48
+47
+46
+46
+46
+49
+51
+52
+53
+55
+59
+67
+78
+90
+105
+113
+118
+119
+117
+109
+102
+94
+86
+78
+69
+64
+60
+57
+55
+54
+54
+55
+56
+57
+60
+63
+67
+71
+75
+81
+86
+90
+94
+98
+103
+105
+108
+111
+113
+116
+118
+120
+121
+123
+124
+125
+125
+125
+125
+125
+125
+124
+124
+123
+123
+122
+122
+122
+122
+122
+123
+124
+125
+126
+129
+131
+134
+137
+142
+147
+150
+156
+163
+167
+167
+160
+136
+106
+82
+80
+85
+116
+155
+183
+182
+177
+170
+152
+114
+43
+16
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+152
+152
+152
+152
+151
+151
+151
+151
+150
+150
+149
+149
+148
+147
+147
+145
+145
+144
+143
+142
+141
+140
+139
+138
+137
+136
+135
+134
+133
+133
+132
+132
+131
+131
+131
+131
+132
+132
+133
+134
+136
+138
+140
+142
+144
+147
+150
+153
+156
+159
+163
+167
+170
+173
+177
+184
+188
+193
+198
+206
+212
+212
+208
+194
+162
+138
+138
+148
+165
+186
+191
+190
+187
+182
+176
+174
+174
+175
+176
+179
+182
+183
+183
+183
+183
+184
+188
+192
+194
+195
+193
+185
+176
+170
+169
+171
+182
+197
+211
+223
+229
+229
+229
+230
+230
+230
+230
+230
+230
+230
+229
+228
+226
+223
+221
+223
+225
+226
+226
+224
+216
+206
+196
+189
+186
+186
+186
+184
+179
+168
+141
+116
+92
+72
+57
+49
+50
+53
+57
+64
+68
+67
+65
+62
+60
+57
+58
+59
+60
+60
+59
+58
+55
+52
+49
+47
+47
+47
+47
+47
+46
+44
+43
+43
+43
+45
+48
+51
+53
+53
+55
+61
+70
+81
+93
+109
+117
+123
+125
+124
+117
+109
+101
+93
+85
+76
+70
+66
+63
+62
+61
+62
+63
+64
+66
+69
+71
+73
+76
+79
+84
+89
+94
+98
+102
+106
+109
+112
+114
+117
+120
+122
+123
+125
+126
+127
+128
+128
+129
+129
+130
+130
+130
+130
+129
+129
+129
+129
+129
+129
+130
+130
+131
+132
+134
+137
+139
+142
+144
+149
+154
+156
+160
+165
+170
+170
+166
+146
+116
+86
+82
+88
+118
+155
+183
+182
+177
+169
+150
+111
+40
+15
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+161
+161
+161
+161
+161
+161
+160
+160
+160
+159
+159
+158
+157
+156
+156
+154
+153
+152
+151
+150
+149
+148
+147
+146
+144
+143
+142
+141
+141
+140
+139
+139
+139
+139
+139
+139
+139
+140
+141
+142
+144
+146
+148
+150
+152
+156
+158
+161
+164
+166
+170
+173
+176
+180
+184
+190
+194
+199
+206
+212
+213
+209
+191
+165
+141
+136
+148
+165
+181
+190
+190
+186
+181
+177
+175
+174
+175
+178
+182
+186
+187
+187
+185
+184
+183
+184
+188
+191
+193
+193
+191
+181
+173
+169
+168
+174
+190
+206
+219
+226
+229
+229
+229
+229
+229
+229
+229
+229
+229
+230
+229
+229
+228
+226
+224
+224
+225
+226
+226
+225
+220
+212
+203
+194
+188
+186
+186
+186
+184
+180
+163
+144
+122
+100
+79
+60
+54
+52
+53
+56
+59
+60
+60
+59
+58
+55
+53
+52
+50
+49
+48
+48
+47
+46
+45
+45
+46
+46
+46
+45
+43
+42
+41
+41
+42
+46
+49
+51
+53
+54
+56
+63
+73
+85
+97
+113
+121
+127
+130
+129
+121
+113
+105
+96
+87
+78
+73
+69
+67
+66
+66
+67
+68
+70
+71
+73
+74
+76
+79
+82
+88
+93
+97
+101
+105
+109
+112
+114
+117
+120
+122
+124
+126
+127
+128
+130
+130
+131
+131
+131
+132
+132
+132
+132
+132
+133
+133
+134
+134
+135
+135
+137
+138
+139
+140
+143
+146
+149
+151
+155
+160
+162
+164
+168
+172
+172
+170
+152
+124
+91
+85
+90
+119
+156
+183
+182
+177
+169
+149
+108
+38
+14
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+171
+171
+171
+171
+170
+170
+170
+170
+169
+169
+168
+167
+166
+166
+165
+163
+162
+161
+160
+158
+157
+156
+154
+153
+152
+151
+150
+149
+148
+148
+147
+147
+146
+146
+146
+147
+147
+148
+149
+150
+152
+154
+156
+158
+161
+164
+166
+169
+171
+173
+177
+180
+183
+186
+191
+195
+200
+206
+212
+214
+211
+193
+167
+144
+133
+144
+164
+180
+189
+190
+186
+181
+177
+175
+174
+175
+179
+185
+190
+193
+193
+192
+188
+185
+184
+184
+188
+190
+192
+192
+189
+178
+171
+168
+168
+178
+198
+213
+224
+228
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+228
+226
+225
+226
+226
+226
+226
+223
+218
+209
+200
+192
+187
+187
+187
+186
+185
+178
+165
+148
+128
+107
+82
+68
+59
+54
+53
+54
+56
+56
+57
+56
+54
+52
+49
+47
+46
+44
+43
+43
+42
+42
+43
+43
+43
+43
+42
+41
+41
+41
+41
+43
+47
+50
+52
+53
+54
+58
+67
+77
+89
+102
+117
+127
+133
+135
+134
+125
+116
+107
+98
+89
+80
+75
+72
+70
+70
+70
+71
+72
+74
+75
+76
+77
+79
+82
+86
+92
+97
+101
+104
+107
+112
+115
+117
+120
+123
+125
+127
+129
+130
+132
+133
+133
+134
+134
+134
+135
+135
+135
+135
+135
+136
+137
+138
+138
+139
+141
+142
+143
+145
+147
+150
+153
+155
+158
+161
+166
+167
+169
+171
+174
+174
+172
+158
+132
+96
+87
+92
+121
+157
+183
+182
+177
+169
+147
+105
+36
+13
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+180
+180
+180
+180
+180
+180
+180
+179
+179
+178
+177
+177
+176
+175
+174
+172
+171
+169
+168
+167
+165
+163
+162
+161
+159
+158
+157
+156
+155
+155
+154
+154
+154
+154
+154
+154
+155
+155
+157
+158
+160
+162
+164
+166
+168
+171
+174
+176
+178
+180
+184
+186
+189
+193
+196
+201
+207
+212
+215
+214
+201
+169
+145
+133
+136
+161
+180
+189
+190
+188
+180
+177
+175
+174
+175
+179
+186
+193
+199
+200
+200
+197
+191
+185
+183
+184
+187
+190
+191
+191
+186
+175
+169
+167
+168
+184
+205
+219
+227
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+228
+227
+227
+227
+227
+227
+225
+221
+215
+207
+198
+189
+188
+187
+187
+187
+186
+180
+169
+155
+136
+109
+91
+75
+64
+57
+54
+53
+54
+54
+54
+54
+52
+50
+48
+46
+44
+42
+41
+40
+40
+40
+41
+41
+41
+41
+40
+41
+41
+42
+45
+49
+52
+53
+54
+55
+61
+72
+83
+94
+106
+123
+133
+139
+141
+138
+129
+118
+108
+98
+89
+80
+76
+74
+73
+73
+73
+74
+75
+76
+77
+78
+80
+83
+86
+91
+96
+100
+104
+107
+110
+115
+118
+121
+123
+126
+129
+131
+132
+134
+135
+136
+137
+137
+138
+138
+138
+138
+138
+138
+139
+140
+140
+141
+142
+144
+145
+147
+149
+150
+152
+156
+159
+161
+164
+167
+171
+173
+174
+175
+176
+176
+175
+163
+140
+102
+91
+95
+123
+158
+183
+182
+177
+168
+146
+101
+33
+12
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+190
+190
+190
+190
+190
+189
+189
+189
+188
+188
+187
+186
+185
+184
+183
+181
+180
+178
+177
+175
+173
+171
+169
+168
+166
+164
+163
+162
+161
+161
+160
+160
+160
+160
+160
+160
+161
+162
+163
+165
+167
+170
+172
+174
+176
+179
+181
+183
+185
+187
+189
+192
+195
+199
+201
+208
+214
+216
+215
+213
+174
+142
+131
+135
+149
+184
+189
+190
+188
+182
+176
+174
+173
+174
+177
+187
+196
+203
+207
+208
+207
+201
+193
+185
+183
+183
+187
+189
+190
+189
+184
+173
+167
+167
+169
+191
+212
+223
+228
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+228
+228
+228
+227
+227
+226
+224
+219
+213
+204
+192
+189
+187
+187
+187
+188
+187
+183
+175
+163
+140
+121
+102
+85
+70
+59
+53
+51
+51
+52
+52
+52
+51
+50
+48
+45
+43
+42
+41
+40
+40
+40
+40
+40
+40
+41
+41
+43
+45
+48
+51
+53
+54
+55
+56
+66
+78
+89
+100
+112
+130
+141
+146
+146
+143
+131
+119
+108
+97
+88
+80
+77
+76
+75
+75
+76
+76
+77
+77
+78
+80
+83
+87
+91
+96
+101
+104
+107
+111
+114
+118
+121
+124
+127
+129
+132
+134
+135
+137
+138
+139
+140
+140
+141
+141
+142
+142
+143
+143
+144
+145
+145
+146
+147
+148
+150
+151
+153
+155
+157
+160
+163
+166
+169
+172
+176
+178
+178
+178
+178
+178
+177
+168
+146
+108
+94
+99
+126
+160
+184
+182
+177
+167
+144
+97
+30
+11
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+202
+202
+202
+202
+202
+202
+202
+202
+201
+201
+200
+199
+198
+196
+195
+193
+191
+189
+188
+186
+184
+182
+180
+179
+177
+176
+175
+174
+173
+172
+172
+171
+171
+171
+171
+172
+173
+174
+175
+177
+179
+181
+183
+185
+186
+189
+190
+192
+193
+195
+197
+200
+203
+206
+210
+217
+217
+216
+208
+185
+133
+129
+136
+154
+183
+191
+190
+186
+181
+175
+172
+172
+175
+181
+190
+202
+208
+212
+215
+215
+214
+205
+194
+185
+182
+183
+185
+187
+188
+188
+181
+171
+166
+166
+170
+199
+217
+226
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+228
+228
+228
+227
+225
+223
+219
+213
+201
+193
+189
+188
+188
+188
+188
+188
+187
+183
+172
+158
+143
+126
+108
+87
+75
+64
+57
+53
+53
+52
+52
+51
+51
+50
+48
+47
+46
+44
+43
+43
+43
+43
+43
+45
+46
+48
+50
+51
+53
+54
+55
+57
+61
+77
+89
+99
+109
+122
+143
+153
+156
+154
+147
+131
+117
+104
+93
+85
+79
+77
+76
+76
+77
+77
+78
+78
+80
+82
+87
+91
+95
+98
+102
+106
+109
+112
+116
+119
+124
+127
+129
+132
+134
+137
+138
+140
+141
+142
+143
+143
+144
+145
+146
+147
+148
+149
+150
+151
+153
+154
+155
+156
+157
+159
+160
+161
+163
+164
+167
+169
+171
+173
+176
+181
+182
+182
+182
+181
+180
+179
+173
+154
+117
+100
+104
+130
+162
+184
+181
+177
+166
+140
+91
+26
+9
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+212
+212
+212
+212
+212
+212
+212
+212
+211
+211
+210
+209
+207
+206
+205
+202
+200
+198
+196
+194
+191
+188
+186
+184
+182
+180
+179
+178
+177
+177
+177
+176
+176
+176
+177
+177
+178
+179
+181
+182
+185
+187
+189
+190
+192
+194
+196
+198
+199
+201
+204
+207
+209
+212
+215
+218
+218
+209
+189
+149
+128
+134
+153
+175
+189
+190
+187
+181
+176
+171
+171
+175
+182
+190
+199
+208
+212
+215
+216
+217
+215
+206
+195
+186
+182
+182
+184
+186
+187
+186
+180
+169
+165
+166
+171
+203
+220
+227
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+227
+226
+224
+221
+217
+207
+199
+193
+189
+188
+188
+188
+189
+189
+188
+184
+176
+166
+154
+139
+118
+104
+90
+78
+68
+59
+56
+54
+53
+52
+51
+50
+50
+49
+48
+47
+47
+47
+47
+48
+48
+49
+50
+52
+53
+54
+54
+56
+62
+71
+87
+97
+106
+118
+133
+156
+162
+163
+158
+147
+127
+112
+100
+90
+83
+78
+77
+77
+77
+78
+79
+80
+83
+85
+88
+93
+96
+99
+102
+106
+110
+113
+117
+120
+124
+128
+131
+134
+136
+138
+140
+142
+143
+144
+145
+146
+147
+148
+149
+151
+152
+154
+155
+156
+158
+159
+160
+162
+163
+164
+165
+167
+168
+169
+170
+172
+174
+175
+176
+178
+182
+184
+184
+184
+183
+182
+181
+175
+159
+123
+105
+109
+134
+164
+184
+181
+176
+164
+137
+86
+24
+8
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+221
+221
+221
+222
+222
+222
+222
+222
+221
+221
+220
+218
+217
+215
+214
+211
+209
+207
+205
+203
+200
+197
+195
+192
+190
+187
+186
+184
+183
+183
+182
+182
+182
+182
+182
+183
+185
+186
+188
+190
+193
+195
+197
+199
+200
+202
+204
+205
+207
+208
+211
+213
+215
+216
+218
+219
+214
+192
+162
+132
+130
+150
+171
+187
+191
+188
+182
+176
+171
+169
+173
+181
+190
+199
+206
+212
+215
+216
+217
+217
+216
+207
+196
+186
+182
+182
+184
+185
+186
+185
+179
+168
+164
+165
+172
+206
+221
+228
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+228
+226
+224
+223
+220
+213
+205
+198
+192
+189
+188
+188
+189
+190
+190
+190
+187
+182
+174
+164
+147
+133
+119
+105
+92
+77
+70
+64
+59
+56
+53
+52
+51
+51
+50
+50
+50
+50
+50
+50
+51
+51
+52
+53
+54
+55
+57
+62
+71
+83
+97
+105
+116
+130
+148
+168
+171
+168
+159
+144
+121
+106
+95
+86
+81
+78
+78
+78
+79
+81
+83
+86
+88
+91
+94
+98
+101
+104
+107
+110
+115
+119
+122
+126
+129
+133
+135
+138
+140
+142
+144
+145
+146
+148
+149
+151
+152
+153
+155
+157
+159
+160
+162
+163
+165
+166
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+184
+185
+186
+186
+185
+183
+182
+178
+162
+129
+110
+114
+137
+166
+184
+181
+176
+163
+133
+81
+21
+7
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+231
+231
+231
+231
+232
+232
+232
+232
+231
+231
+230
+229
+227
+225
+223
+220
+218
+215
+213
+210
+207
+205
+203
+200
+198
+195
+193
+192
+190
+189
+189
+188
+188
+188
+189
+191
+192
+194
+197
+199
+202
+204
+205
+207
+208
+210
+211
+212
+213
+214
+216
+217
+218
+219
+219
+217
+201
+169
+138
+127
+143
+170
+185
+190
+189
+184
+176
+171
+168
+170
+179
+189
+198
+205
+210
+214
+216
+217
+218
+218
+216
+208
+197
+187
+182
+181
+183
+184
+184
+184
+178
+168
+163
+165
+172
+208
+222
+228
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+230
+230
+230
+230
+229
+228
+226
+225
+223
+222
+217
+211
+204
+197
+191
+188
+188
+189
+189
+190
+192
+192
+190
+188
+183
+171
+160
+147
+134
+120
+103
+91
+81
+73
+66
+60
+57
+55
+53
+52
+52
+52
+51
+52
+52
+52
+53
+54
+54
+55
+58
+64
+73
+83
+94
+105
+114
+128
+145
+165
+179
+178
+170
+157
+138
+114
+100
+89
+83
+79
+78
+79
+81
+83
+85
+89
+92
+95
+97
+100
+103
+106
+109
+112
+116
+121
+124
+128
+131
+134
+137
+140
+142
+144
+145
+148
+149
+151
+152
+154
+156
+158
+160
+162
+164
+166
+168
+169
+171
+172
+174
+175
+175
+176
+177
+178
+179
+179
+180
+181
+182
+182
+183
+183
+183
+185
+186
+187
+187
+186
+185
+184
+180
+166
+135
+115
+119
+141
+168
+183
+181
+176
+161
+129
+75
+18
+6
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+240
+241
+241
+241
+242
+242
+241
+241
+241
+241
+241
+240
+239
+237
+235
+231
+227
+223
+219
+215
+212
+209
+207
+206
+204
+202
+200
+199
+198
+197
+196
+196
+196
+197
+197
+199
+201
+203
+205
+207
+209
+210
+211
+212
+213
+214
+214
+215
+216
+217
+218
+219
+219
+220
+219
+213
+173
+142
+127
+130
+170
+186
+191
+189
+186
+179
+170
+167
+168
+173
+189
+196
+203
+208
+212
+216
+217
+218
+218
+218
+216
+209
+198
+187
+181
+181
+182
+183
+183
+183
+178
+167
+163
+164
+171
+208
+222
+228
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+230
+230
+230
+230
+230
+229
+227
+225
+224
+223
+221
+216
+209
+202
+195
+190
+188
+188
+188
+189
+191
+193
+194
+194
+193
+188
+181
+171
+161
+148
+131
+118
+106
+95
+85
+74
+68
+63
+59
+56
+54
+54
+53
+54
+54
+55
+55
+55
+56
+57
+66
+77
+87
+97
+104
+114
+127
+144
+163
+182
+187
+182
+169
+151
+129
+105
+93
+85
+80
+79
+80
+82
+85
+88
+91
+95
+98
+100
+102
+105
+108
+111
+115
+118
+122
+127
+130
+134
+137
+139
+142
+144
+146
+148
+150
+152
+154
+155
+157
+160
+163
+165
+168
+170
+172
+174
+176
+177
+178
+179
+180
+181
+182
+182
+183
+183
+184
+184
+184
+185
+185
+185
+186
+186
+186
+187
+187
+188
+188
+187
+186
+185
+181
+169
+141
+121
+124
+145
+170
+183
+181
+176
+159
+125
+70
+16
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+252
+251
+249
+246
+244
+241
+240
+239
+239
+240
+241
+241
+242
+243
+243
+242
+241
+240
+237
+233
+226
+221
+216
+212
+210
+207
+206
+205
+204
+204
+203
+203
+203
+204
+204
+206
+208
+210
+212
+214
+215
+215
+216
+216
+217
+217
+218
+219
+220
+221
+221
+221
+221
+219
+214
+162
+133
+125
+136
+166
+192
+191
+189
+185
+181
+166
+164
+166
+172
+185
+195
+201
+207
+212
+216
+218
+219
+219
+219
+219
+217
+209
+199
+189
+182
+181
+181
+182
+182
+182
+178
+168
+163
+163
+168
+206
+222
+228
+229
+229
+228
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+230
+230
+230
+230
+230
+230
+229
+227
+226
+224
+223
+222
+220
+216
+210
+202
+194
+191
+189
+188
+188
+189
+191
+193
+195
+197
+197
+195
+191
+185
+177
+163
+152
+140
+128
+117
+104
+95
+87
+81
+75
+69
+66
+64
+62
+61
+61
+62
+65
+70
+78
+90
+97
+103
+110
+118
+135
+153
+172
+187
+196
+192
+177
+157
+134
+112
+91
+84
+82
+81
+82
+87
+91
+95
+98
+100
+103
+105
+107
+110
+113
+117
+120
+124
+128
+131
+135
+138
+141
+143
+146
+148
+150
+152
+154
+157
+160
+162
+165
+168
+171
+174
+176
+178
+180
+182
+183
+185
+186
+186
+187
+187
+187
+187
+187
+187
+187
+187
+187
+187
+187
+187
+187
+187
+187
+188
+188
+188
+188
+189
+188
+187
+186
+183
+172
+147
+127
+131
+150
+172
+183
+180
+175
+155
+118
+62
+13
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+180
+181
+182
+185
+190
+194
+199
+200
+200
+198
+196
+198
+201
+205
+211
+220
+227
+233
+236
+235
+233
+230
+226
+221
+217
+213
+210
+209
+208
+207
+207
+207
+207
+208
+209
+213
+215
+216
+216
+216
+215
+215
+215
+215
+215
+217
+218
+219
+219
+216
+203
+192
+178
+161
+143
+124
+124
+141
+165
+186
+192
+189
+186
+181
+173
+162
+162
+168
+177
+188
+198
+205
+211
+215
+218
+219
+219
+219
+219
+219
+217
+211
+201
+191
+184
+180
+181
+181
+181
+181
+178
+169
+163
+161
+165
+200
+220
+227
+228
+228
+228
+228
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+229
+230
+230
+230
+230
+230
+230
+230
+229
+227
+226
+224
+223
+222
+222
+219
+214
+208
+199
+194
+191
+189
+188
+188
+190
+191
+194
+196
+198
+199
+198
+195
+190
+180
+170
+160
+149
+139
+125
+115
+107
+99
+92
+85
+81
+78
+76
+76
+78
+81
+85
+90
+96
+102
+107
+114
+125
+138
+158
+175
+189
+198
+200
+187
+165
+140
+117
+99
+86
+84
+83
+85
+89
+94
+98
+100
+103
+105
+108
+110
+113
+116
+119
+124
+128
+131
+135
+138
+142
+144
+147
+149
+151
+154
+157
+159
+162
+164
+168
+171
+174
+177
+179
+182
+184
+186
+187
+188
+188
+189
+189
+189
+189
+189
+189
+189
+189
+189
+188
+188
+188
+188
+188
+188
+188
+188
+188
+188
+188
+189
+189
+189
+189
+188
+187
+184
+174
+150
+132
+136
+154
+175
+183
+180
+174
+151
+112
+56
+10
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+148
+162
+177
+189
+197
+202
+206
+207
+207
+205
+204
+204
+204
+204
+204
+208
+214
+220
+226
+232
+235
+234
+232
+228
+224
+219
+216
+213
+212
+211
+210
+211
+212
+214
+216
+219
+218
+217
+212
+202
+197
+198
+201
+203
+203
+198
+187
+175
+160
+145
+132
+128
+125
+121
+115
+121
+140
+164
+184
+193
+190
+186
+182
+176
+164
+159
+162
+170
+180
+190
+202
+209
+214
+217
+219
+219
+219
+219
+219
+219
+218
+212
+204
+194
+186
+181
+180
+180
+181
+180
+178
+170
+163
+160
+162
+193
+216
+226
+228
+228
+228
+228
+228
+229
+229
+229
+229
+230
+230
+230
+230
+230
+230
+230
+230
+230
+230
+230
+230
+230
+229
+227
+226
+224
+223
+223
+222
+221
+218
+212
+203
+197
+193
+190
+189
+188
+189
+190
+192
+194
+198
+200
+201
+201
+198
+192
+185
+176
+167
+157
+144
+134
+126
+118
+111
+103
+99
+97
+95
+95
+96
+99
+102
+105
+108
+114
+122
+133
+146
+160
+179
+192
+201
+203
+198
+173
+146
+122
+103
+90
+85
+86
+88
+92
+97
+101
+104
+106
+108
+110
+114
+117
+120
+124
+127
+132
+136
+139
+142
+145
+148
+151
+153
+155
+158
+161
+164
+167
+170
+173
+177
+180
+183
+185
+187
+189
+189
+190
+191
+191
+192
+192
+192
+192
+192
+191
+191
+191
+191
+191
+190
+190
+190
+190
+190
+189
+189
+189
+189
+189
+189
+189
+189
+189
+189
+188
+188
+185
+176
+153
+137
+140
+158
+177
+183
+180
+173
+147
+105
+49
+9
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+152
+178
+200
+216
+224
+226
+226
+226
+226
+226
+226
+225
+222
+217
+211
+207
+206
+209
+214
+223
+232
+234
+234
+232
+230
+225
+222
+219
+216
+215
+215
+216
+218
+220
+222
+217
+205
+194
+182
+165
+154
+155
+156
+157
+153
+140
+123
+105
+86
+71
+71
+80
+94
+108
+119
+141
+168
+185
+194
+193
+186
+184
+178
+169
+157
+157
+163
+172
+183
+193
+206
+213
+216
+218
+219
+219
+219
+219
+219
+219
+219
+214
+207
+197
+189
+182
+180
+180
+180
+180
+178
+171
+164
+160
+160
+184
+211
+224
+228
+228
+228
+228
+228
+228
+228
+229
+229
+230
+230
+230
+230
+230
+230
+230
+230
+230
+230
+230
+230
+230
+228
+227
+225
+224
+223
+223
+223
+222
+220
+215
+207
+200
+195
+192
+190
+189
+188
+189
+190
+193
+197
+200
+203
+204
+204
+200
+195
+188
+181
+172
+160
+151
+143
+136
+129
+122
+118
+116
+114
+113
+113
+114
+115
+118
+121
+131
+143
+156
+170
+182
+197
+204
+206
+201
+188
+151
+124
+105
+92
+87
+88
+91
+95
+100
+104
+108
+110
+112
+114
+117
+121
+125
+128
+132
+136
+141
+144
+147
+149
+152
+155
+157
+160
+163
+166
+170
+173
+177
+180
+183
+186
+188
+190
+192
+193
+193
+194
+194
+194
+194
+195
+195
+195
+195
+195
+194
+194
+194
+194
+194
+193
+193
+192
+192
+192
+192
+191
+191
+191
+191
+191
+190
+190
+190
+190
+189
+188
+186
+177
+156
+141
+145
+162
+179
+183
+180
+171
+143
+98
+43
+7
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+186
+210
+221
+226
+227
+227
+226
+226
+225
+225
+225
+225
+225
+225
+224
+217
+210
+207
+207
+210
+225
+231
+234
+234
+234
+230
+228
+225
+222
+220
+221
+223
+224
+224
+222
+202
+160
+129
+109
+98
+83
+72
+62
+50
+36
+23
+23
+28
+39
+54
+80
+99
+114
+128
+143
+177
+190
+195
+193
+189
+184
+181
+172
+161
+153
+154
+162
+173
+184
+196
+210
+215
+217
+218
+218
+219
+219
+219
+219
+219
+219
+217
+210
+202
+192
+184
+181
+180
+179
+179
+178
+172
+165
+160
+158
+174
+205
+222
+228
+228
+228
+228
+227
+227
+228
+228
+229
+229
+230
+230
+230
+230
+230
+230
+230
+230
+230
+230
+230
+229
+228
+226
+225
+224
+223
+223
+223
+223
+221
+218
+209
+203
+198
+194
+191
+189
+189
+189
+190
+192
+197
+200
+203
+205
+206
+205
+201
+196
+190
+184
+174
+166
+159
+152
+145
+139
+134
+131
+127
+125
+123
+123
+126
+132
+141
+159
+171
+181
+190
+199
+208
+210
+205
+192
+165
+123
+103
+92
+88
+88
+93
+98
+103
+107
+109
+112
+114
+117
+120
+124
+129
+133
+137
+141
+145
+149
+151
+154
+156
+159
+163
+166
+169
+173
+176
+181
+184
+187
+190
+192
+194
+195
+195
+196
+196
+197
+198
+198
+199
+199
+199
+199
+199
+199
+199
+199
+199
+199
+198
+198
+197
+197
+196
+196
+196
+195
+195
+194
+193
+193
+192
+192
+191
+191
+190
+189
+189
+187
+178
+159
+145
+150
+165
+180
+183
+179
+170
+138
+91
+37
+5
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+197
+216
+224
+226
+226
+224
+223
+223
+223
+224
+224
+224
+224
+225
+225
+224
+218
+212
+207
+207
+211
+220
+228
+233
+234
+233
+232
+229
+227
+227
+230
+230
+218
+184
+115
+59
+41
+27
+18
+11
+8
+5
+4
+6
+10
+28
+49
+73
+97
+118
+135
+141
+152
+166
+185
+196
+196
+193
+189
+184
+182
+174
+162
+152
+150
+152
+160
+172
+186
+201
+214
+216
+217
+217
+217
+218
+219
+219
+219
+220
+220
+219
+215
+208
+199
+188
+183
+180
+179
+179
+178
+174
+167
+161
+158
+162
+190
+212
+226
+228
+228
+227
+227
+227
+227
+227
+228
+228
+229
+229
+229
+229
+230
+230
+230
+230
+229
+229
+229
+228
+226
+225
+224
+224
+224
+223
+223
+223
+222
+218
+210
+203
+198
+194
+191
+189
+189
+189
+190
+193
+198
+201
+204
+207
+209
+209
+207
+204
+199
+192
+183
+176
+169
+163
+157
+149
+145
+143
+141
+141
+146
+153
+162
+171
+180
+188
+194
+200
+206
+211
+211
+204
+182
+151
+117
+95
+92
+92
+94
+99
+107
+111
+114
+116
+118
+122
+125
+129
+133
+138
+143
+147
+151
+154
+157
+160
+163
+166
+169
+173
+178
+181
+185
+188
+191
+194
+196
+197
+198
+199
+200
+200
+201
+202
+203
+204
+204
+204
+205
+205
+205
+206
+206
+206
+206
+206
+206
+205
+205
+204
+204
+203
+202
+202
+201
+200
+200
+199
+198
+197
+196
+195
+194
+193
+192
+190
+189
+187
+179
+161
+151
+156
+170
+182
+183
+179
+166
+130
+80
+29
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+205
+219
+225
+226
+225
+223
+223
+223
+223
+224
+224
+224
+224
+224
+225
+225
+222
+216
+210
+207
+211
+219
+227
+232
+234
+234
+233
+232
+231
+231
+226
+189
+138
+87
+47
+24
+17
+12
+8
+6
+4
+5
+13
+27
+50
+83
+103
+120
+133
+141
+152
+162
+175
+186
+194
+197
+194
+189
+185
+183
+181
+167
+156
+149
+148
+150
+158
+172
+188
+205
+216
+216
+216
+216
+216
+217
+219
+219
+219
+220
+220
+220
+218
+214
+206
+193
+186
+182
+179
+179
+177
+175
+169
+163
+158
+159
+177
+200
+220
+227
+228
+227
+227
+227
+227
+227
+227
+227
+227
+228
+228
+228
+228
+228
+228
+228
+228
+227
+227
+226
+225
+225
+224
+224
+224
+224
+224
+223
+220
+216
+207
+201
+196
+193
+190
+189
+190
+191
+194
+197
+202
+206
+209
+211
+212
+212
+210
+207
+204
+198
+190
+184
+178
+173
+168
+164
+163
+163
+164
+167
+172
+177
+183
+188
+192
+199
+204
+209
+211
+212
+199
+171
+142
+116
+101
+94
+95
+98
+103
+108
+114
+116
+119
+122
+125
+131
+135
+140
+144
+148
+154
+157
+161
+164
+168
+173
+176
+180
+184
+187
+191
+193
+196
+197
+199
+200
+201
+202
+203
+203
+204
+205
+205
+205
+206
+206
+206
+207
+207
+207
+207
+207
+208
+208
+208
+208
+208
+208
+207
+207
+207
+207
+206
+205
+205
+204
+203
+202
+201
+200
+199
+197
+196
+195
+193
+191
+190
+187
+180
+162
+154
+160
+172
+183
+183
+178
+162
+123
+72
+24
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+207
+220
+225
+226
+225
+222
+222
+223
+224
+225
+224
+224
+224
+224
+225
+225
+223
+217
+211
+209
+211
+219
+227
+233
+234
+234
+234
+233
+230
+222
+171
+117
+70
+34
+16
+8
+6
+5
+4
+3
+6
+19
+39
+65
+92
+120
+134
+145
+153
+159
+171
+181
+190
+196
+197
+195
+190
+186
+184
+183
+176
+160
+151
+147
+147
+149
+157
+172
+191
+209
+217
+216
+215
+213
+213
+216
+218
+219
+220
+220
+220
+221
+220
+217
+212
+200
+191
+185
+180
+179
+177
+176
+172
+166
+159
+157
+166
+187
+210
+225
+228
+227
+227
+227
+227
+226
+226
+226
+226
+227
+227
+227
+227
+227
+227
+227
+226
+226
+226
+225
+225
+224
+224
+224
+224
+224
+223
+221
+217
+211
+203
+197
+194
+191
+191
+192
+194
+197
+200
+204
+208
+210
+212
+214
+214
+213
+211
+209
+206
+202
+197
+192
+188
+184
+181
+180
+179
+180
+182
+184
+189
+192
+195
+199
+203
+207
+210
+211
+206
+194
+161
+134
+114
+101
+97
+99
+104
+108
+113
+117
+121
+124
+128
+132
+136
+143
+148
+152
+156
+160
+165
+170
+174
+178
+182
+186
+190
+192
+195
+197
+199
+200
+201
+202
+203
+204
+204
+204
+205
+205
+206
+206
+206
+207
+207
+207
+207
+207
+207
+208
+208
+208
+208
+208
+209
+209
+209
+209
+209
+209
+209
+209
+209
+208
+208
+207
+206
+205
+204
+204
+202
+200
+199
+197
+194
+191
+190
+188
+180
+164
+158
+164
+175
+183
+183
+177
+158
+115
+64
+19
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+206
+220
+225
+225
+225
+222
+221
+222
+224
+225
+224
+224
+224
+224
+225
+224
+222
+217
+212
+210
+214
+222
+229
+233
+235
+234
+233
+227
+210
+180
+95
+48
+22
+11
+6
+4
+4
+4
+4
+5
+18
+45
+75
+104
+126
+143
+151
+159
+166
+175
+187
+194
+198
+198
+196
+193
+187
+185
+184
+183
+170
+155
+148
+147
+147
+148
+156
+173
+194
+213
+216
+215
+212
+211
+211
+215
+217
+219
+219
+220
+220
+221
+221
+220
+217
+207
+197
+189
+183
+179
+177
+176
+173
+169
+161
+157
+159
+173
+195
+218
+226
+227
+227
+227
+227
+226
+226
+226
+226
+226
+226
+226
+226
+226
+226
+225
+225
+225
+225
+225
+224
+224
+224
+224
+224
+223
+221
+217
+211
+205
+197
+193
+191
+190
+191
+195
+199
+202
+206
+209
+212
+213
+214
+215
+214
+213
+211
+209
+206
+204
+201
+198
+196
+194
+193
+192
+192
+193
+194
+196
+199
+201
+203
+206
+209
+211
+208
+199
+183
+159
+121
+106
+100
+100
+102
+108
+114
+118
+122
+125
+130
+134
+139
+145
+150
+157
+161
+166
+170
+174
+179
+183
+187
+191
+194
+198
+200
+201
+202
+203
+203
+203
+203
+204
+204
+204
+204
+204
+204
+204
+204
+204
+205
+205
+205
+206
+206
+207
+207
+207
+208
+208
+208
+208
+209
+209
+209
+209
+210
+210
+210
+210
+210
+210
+210
+209
+209
+208
+207
+206
+205
+203
+201
+199
+196
+192
+191
+188
+180
+165
+161
+168
+177
+184
+182
+176
+152
+106
+55
+15
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+205
+219
+225
+225
+225
+222
+221
+221
+222
+224
+225
+225
+225
+225
+225
+222
+218
+215
+213
+212
+219
+228
+233
+235
+235
+234
+230
+207
+161
+88
+28
+15
+7
+4
+3
+3
+3
+3
+5
+10
+44
+81
+110
+130
+144
+157
+166
+174
+183
+191
+198
+199
+199
+197
+194
+188
+185
+184
+184
+183
+162
+151
+147
+147
+147
+148
+156
+174
+197
+214
+216
+213
+210
+207
+208
+213
+216
+217
+219
+220
+220
+221
+221
+221
+221
+215
+205
+195
+187
+180
+177
+176
+174
+171
+165
+157
+156
+161
+176
+203
+224
+226
+227
+227
+227
+226
+226
+226
+226
+226
+226
+225
+225
+225
+225
+225
+225
+225
+225
+225
+224
+224
+224
+224
+224
+222
+216
+209
+202
+196
+190
+188
+188
+190
+192
+197
+200
+204
+207
+210
+212
+213
+214
+214
+213
+212
+210
+208
+205
+203
+201
+200
+199
+198
+197
+197
+198
+199
+201
+203
+206
+208
+210
+211
+212
+208
+193
+166
+136
+111
+102
+102
+104
+108
+114
+119
+122
+125
+128
+133
+140
+146
+152
+158
+163
+170
+176
+181
+187
+191
+196
+199
+200
+201
+202
+202
+203
+203
+204
+204
+204
+203
+203
+202
+202
+201
+201
+201
+200
+200
+199
+199
+199
+200
+201
+202
+203
+204
+205
+206
+207
+207
+208
+208
+208
+209
+209
+209
+210
+210
+210
+210
+211
+211
+211
+211
+211
+210
+209
+209
+207
+206
+204
+201
+198
+193
+192
+188
+180
+166
+164
+172
+180
+184
+182
+175
+145
+97
+47
+11
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+198
+216
+224
+225
+226
+222
+221
+221
+221
+221
+221
+221
+221
+220
+219
+217
+217
+217
+220
+225
+232
+234
+234
+234
+232
+216
+166
+106
+52
+21
+8
+4
+3
+2
+2
+3
+3
+5
+15
+39
+91
+117
+137
+152
+166
+180
+187
+193
+197
+199
+200
+199
+197
+193
+191
+186
+185
+185
+184
+180
+155
+149
+147
+147
+147
+148
+155
+176
+200
+216
+216
+210
+205
+202
+203
+208
+211
+214
+216
+218
+219
+220
+221
+221
+222
+220
+215
+207
+197
+187
+179
+177
+175
+173
+171
+161
+157
+156
+160
+171
+205
+219
+225
+227
+227
+226
+226
+226
+226
+226
+226
+225
+225
+225
+225
+225
+225
+225
+224
+224
+224
+223
+222
+220
+216
+207
+200
+194
+190
+187
+186
+186
+187
+189
+191
+195
+197
+199
+201
+202
+204
+204
+204
+204
+204
+203
+203
+202
+202
+202
+201
+201
+201
+201
+202
+204
+206
+207
+208
+208
+209
+209
+207
+201
+186
+149
+125
+111
+105
+104
+106
+111
+116
+121
+125
+132
+137
+144
+150
+157
+165
+171
+177
+182
+188
+194
+197
+199
+200
+201
+201
+202
+202
+202
+201
+199
+198
+196
+194
+192
+188
+184
+181
+177
+174
+171
+170
+169
+168
+168
+168
+169
+171
+173
+176
+180
+184
+187
+191
+195
+200
+202
+205
+206
+208
+209
+209
+209
+210
+210
+210
+210
+211
+212
+212
+212
+212
+212
+211
+211
+210
+208
+207
+204
+200
+194
+192
+188
+180
+168
+167
+176
+182
+184
+182
+171
+134
+84
+36
+7
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+189
+211
+221
+224
+226
+224
+223
+222
+221
+221
+221
+221
+221
+221
+221
+221
+223
+226
+228
+230
+233
+232
+227
+215
+191
+127
+80
+45
+21
+9
+4
+2
+2
+2
+2
+2
+4
+14
+36
+73
+117
+139
+157
+171
+182
+191
+194
+197
+199
+200
+199
+197
+195
+193
+190
+186
+186
+186
+183
+176
+152
+150
+149
+149
+148
+149
+156
+178
+203
+216
+215
+208
+202
+198
+198
+202
+206
+209
+211
+214
+216
+218
+220
+220
+221
+221
+219
+214
+207
+196
+184
+179
+176
+174
+172
+166
+160
+157
+157
+160
+178
+201
+215
+223
+226
+226
+226
+225
+225
+225
+225
+225
+225
+225
+224
+224
+224
+223
+223
+222
+219
+216
+212
+208
+202
+196
+192
+189
+187
+186
+186
+186
+188
+189
+191
+193
+195
+196
+198
+199
+200
+201
+201
+202
+202
+202
+202
+203
+203
+203
+204
+205
+206
+206
+207
+207
+207
+207
+207
+206
+200
+187
+171
+153
+136
+120
+114
+111
+112
+116
+121
+126
+130
+134
+139
+146
+152
+159
+166
+174
+183
+188
+191
+194
+196
+199
+200
+200
+199
+198
+196
+192
+188
+184
+179
+172
+167
+162
+158
+154
+151
+149
+147
+145
+143
+141
+140
+139
+139
+139
+141
+142
+144
+146
+149
+154
+158
+163
+169
+175
+184
+189
+195
+199
+203
+206
+208
+209
+210
+210
+210
+210
+211
+211
+212
+213
+213
+212
+212
+212
+211
+210
+208
+206
+201
+195
+193
+187
+179
+169
+170
+179
+183
+184
+181
+168
+124
+73
+29
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+175
+202
+215
+221
+225
+224
+224
+223
+223
+222
+222
+222
+223
+223
+224
+225
+226
+228
+229
+228
+222
+205
+181
+149
+111
+56
+30
+14
+6
+3
+2
+1
+2
+2
+2
+3
+8
+30
+64
+104
+141
+160
+174
+185
+192
+196
+198
+199
+200
+199
+198
+196
+194
+192
+190
+186
+187
+187
+183
+173
+152
+152
+152
+151
+149
+149
+157
+180
+205
+216
+214
+205
+198
+194
+192
+195
+199
+202
+205
+208
+212
+215
+217
+218
+220
+221
+220
+218
+214
+206
+193
+185
+180
+176
+173
+170
+164
+159
+156
+155
+162
+178
+196
+211
+221
+225
+225
+225
+225
+224
+224
+223
+223
+222
+221
+220
+219
+218
+216
+214
+210
+207
+203
+199
+195
+191
+189
+188
+187
+186
+187
+188
+189
+191
+192
+195
+196
+198
+199
+200
+202
+202
+203
+204
+205
+206
+206
+206
+207
+207
+208
+208
+208
+208
+207
+205
+202
+197
+189
+180
+164
+151
+138
+126
+117
+113
+115
+117
+120
+125
+132
+138
+144
+150
+157
+167
+173
+179
+184
+189
+194
+196
+197
+198
+197
+193
+190
+185
+180
+175
+168
+163
+158
+154
+149
+144
+140
+137
+134
+132
+130
+129
+128
+128
+127
+126
+125
+125
+125
+125
+125
+126
+127
+129
+131
+134
+138
+142
+148
+154
+164
+172
+180
+188
+194
+201
+204
+207
+209
+210
+210
+210
+211
+211
+212
+213
+213
+213
+213
+213
+212
+211
+210
+207
+202
+195
+193
+187
+179
+171
+173
+181
+184
+184
+180
+163
+113
+63
+23
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+157
+188
+204
+212
+220
+222
+223
+223
+223
+223
+223
+223
+224
+224
+224
+223
+221
+217
+210
+199
+176
+145
+108
+69
+34
+11
+6
+3
+1
+1
+1
+1
+1
+1
+1
+4
+19
+54
+95
+131
+161
+177
+187
+194
+197
+198
+199
+200
+199
+199
+197
+195
+194
+193
+190
+188
+188
+188
+183
+170
+154
+155
+155
+154
+150
+149
+158
+183
+207
+216
+213
+203
+195
+190
+186
+187
+191
+193
+196
+200
+204
+209
+212
+215
+217
+220
+220
+220
+219
+215
+204
+194
+186
+180
+175
+172
+168
+163
+158
+155
+153
+160
+173
+190
+207
+220
+222
+223
+224
+223
+222
+221
+220
+219
+218
+216
+214
+212
+210
+207
+203
+200
+197
+195
+193
+191
+191
+190
+190
+191
+192
+193
+195
+197
+198
+201
+202
+203
+205
+206
+207
+207
+208
+208
+209
+209
+210
+210
+209
+209
+207
+206
+203
+200
+196
+188
+181
+171
+159
+145
+129
+122
+118
+116
+117
+120
+124
+129
+134
+139
+148
+154
+162
+170
+178
+187
+191
+195
+196
+197
+195
+193
+190
+186
+181
+173
+166
+159
+152
+145
+138
+133
+130
+127
+125
+124
+123
+123
+122
+122
+121
+121
+121
+121
+121
+121
+121
+121
+121
+120
+119
+119
+119
+119
+120
+122
+124
+127
+130
+135
+145
+154
+163
+173
+182
+192
+198
+203
+206
+209
+209
+210
+210
+211
+212
+213
+213
+214
+214
+214
+213
+212
+211
+208
+202
+196
+193
+186
+178
+173
+175
+183
+185
+183
+179
+155
+102
+53
+17
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+138
+167
+185
+197
+209
+215
+218
+220
+220
+221
+221
+221
+221
+220
+218
+212
+202
+183
+157
+123
+72
+42
+22
+10
+3
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+8
+40
+83
+125
+154
+179
+190
+195
+197
+197
+199
+199
+199
+199
+198
+197
+196
+195
+194
+191
+189
+190
+189
+183
+168
+157
+158
+159
+157
+151
+150
+160
+185
+209
+215
+211
+201
+192
+186
+180
+179
+181
+182
+185
+189
+194
+200
+204
+208
+212
+217
+218
+220
+220
+219
+215
+206
+196
+187
+179
+174
+172
+168
+163
+156
+153
+152
+154
+162
+179
+206
+215
+221
+224
+223
+223
+221
+220
+219
+217
+214
+212
+210
+208
+206
+202
+200
+198
+196
+195
+195
+195
+197
+199
+201
+205
+207
+209
+211
+212
+213
+214
+214
+214
+214
+213
+213
+213
+212
+211
+210
+210
+209
+207
+205
+201
+195
+186
+176
+163
+146
+135
+127
+122
+119
+117
+117
+118
+120
+124
+133
+140
+148
+157
+165
+176
+183
+189
+193
+195
+197
+197
+197
+196
+193
+184
+174
+163
+152
+142
+133
+128
+126
+124
+123
+122
+122
+122
+121
+121
+121
+122
+122
+122
+123
+123
+123
+123
+123
+123
+123
+122
+122
+121
+121
+120
+119
+118
+118
+117
+117
+117
+118
+120
+122
+128
+136
+145
+156
+166
+180
+189
+196
+202
+206
+209
+209
+210
+211
+212
+213
+213
+214
+214
+214
+214
+213
+212
+209
+203
+197
+193
+186
+178
+174
+179
+185
+185
+182
+177
+146
+89
+43
+12
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+114
+131
+144
+154
+166
+173
+177
+180
+180
+178
+172
+165
+154
+139
+121
+92
+70
+50
+34
+21
+10
+6
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+23
+78
+122
+155
+176
+193
+195
+196
+197
+197
+199
+199
+199
+199
+198
+198
+198
+197
+195
+192
+191
+192
+191
+184
+169
+163
+164
+164
+160
+151
+150
+164
+188
+210
+215
+209
+198
+189
+182
+173
+169
+167
+166
+167
+170
+175
+181
+187
+193
+199
+207
+211
+215
+218
+219
+219
+216
+211
+203
+193
+181
+176
+173
+170
+167
+158
+154
+151
+150
+150
+158
+174
+191
+206
+217
+220
+221
+221
+220
+219
+218
+216
+215
+214
+213
+212
+211
+211
+212
+213
+214
+214
+215
+215
+216
+216
+216
+215
+215
+215
+214
+213
+213
+212
+210
+208
+205
+202
+198
+193
+185
+177
+169
+161
+153
+141
+135
+130
+127
+125
+124
+124
+125
+126
+128
+133
+138
+144
+149
+154
+159
+165
+171
+178
+185
+191
+194
+197
+197
+196
+188
+177
+164
+151
+139
+129
+125
+123
+122
+121
+121
+121
+121
+121
+122
+124
+126
+128
+130
+132
+136
+138
+141
+143
+146
+148
+148
+148
+148
+146
+144
+141
+139
+135
+132
+127
+124
+122
+120
+118
+116
+115
+115
+115
+115
+117
+121
+127
+135
+145
+161
+172
+183
+192
+200
+205
+207
+209
+210
+211
+212
+213
+214
+214
+215
+214
+214
+213
+210
+203
+197
+193
+185
+178
+176
+182
+186
+185
+181
+174
+130
+72
+31
+7
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+102
+110
+115
+119
+123
+125
+122
+120
+115
+109
+100
+94
+86
+77
+67
+54
+44
+34
+25
+17
+9
+5
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+7
+48
+105
+144
+170
+186
+195
+195
+196
+196
+197
+199
+199
+199
+199
+199
+200
+200
+198
+196
+193
+193
+194
+192
+186
+172
+168
+168
+167
+161
+150
+150
+166
+191
+211
+214
+208
+197
+188
+180
+170
+163
+159
+156
+155
+156
+158
+163
+169
+175
+182
+192
+199
+205
+211
+215
+218
+217
+215
+211
+206
+195
+186
+179
+174
+171
+166
+161
+157
+153
+150
+150
+155
+160
+167
+179
+194
+203
+210
+214
+215
+216
+216
+215
+215
+214
+214
+213
+213
+213
+213
+213
+213
+213
+212
+212
+210
+208
+205
+202
+198
+192
+187
+183
+178
+173
+167
+163
+158
+154
+150
+146
+143
+140
+137
+134
+131
+130
+128
+128
+127
+128
+130
+132
+136
+140
+146
+153
+161
+169
+177
+187
+191
+195
+197
+198
+194
+186
+175
+164
+153
+142
+136
+131
+127
+124
+122
+121
+121
+122
+123
+126
+129
+134
+139
+144
+152
+157
+162
+167
+171
+175
+178
+179
+180
+181
+182
+182
+181
+180
+179
+176
+173
+169
+164
+159
+151
+145
+138
+131
+125
+120
+117
+114
+113
+113
+113
+115
+119
+124
+133
+147
+159
+171
+182
+192
+201
+204
+207
+208
+210
+212
+213
+214
+215
+215
+215
+214
+213
+210
+203
+198
+191
+184
+178
+178
+185
+186
+184
+179
+170
+115
+59
+23
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+94
+97
+98
+97
+95
+92
+88
+84
+80
+75
+69
+65
+61
+56
+51
+47
+42
+35
+28
+21
+12
+6
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+5
+13
+76
+130
+162
+180
+192
+195
+195
+195
+196
+197
+199
+199
+199
+199
+200
+201
+201
+199
+197
+194
+195
+195
+194
+189
+177
+172
+172
+169
+161
+150
+150
+169
+193
+211
+214
+208
+196
+187
+178
+168
+159
+154
+148
+145
+144
+144
+147
+151
+157
+163
+174
+181
+190
+198
+205
+213
+215
+216
+215
+213
+206
+198
+190
+182
+176
+171
+168
+164
+159
+155
+151
+149
+148
+149
+154
+165
+171
+178
+183
+187
+193
+195
+197
+198
+199
+200
+199
+199
+198
+196
+194
+192
+190
+187
+184
+180
+176
+172
+169
+165
+160
+157
+153
+150
+146
+142
+140
+137
+135
+133
+132
+131
+130
+130
+130
+131
+132
+133
+135
+137
+142
+148
+154
+161
+167
+176
+182
+187
+192
+196
+197
+193
+187
+179
+171
+161
+152
+144
+135
+128
+123
+121
+120
+120
+121
+124
+128
+132
+138
+144
+152
+159
+165
+171
+176
+182
+186
+190
+193
+196
+198
+199
+200
+200
+201
+201
+201
+200
+200
+199
+197
+195
+192
+188
+184
+177
+169
+161
+152
+142
+131
+124
+118
+114
+112
+111
+111
+113
+117
+123
+135
+147
+159
+172
+184
+195
+200
+204
+207
+209
+211
+213
+214
+215
+215
+215
+215
+213
+209
+203
+198
+190
+183
+179
+180
+187
+186
+183
+176
+163
+99
+47
+17
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+89
+89
+89
+87
+83
+75
+71
+68
+66
+65
+64
+64
+63
+62
+61
+58
+54
+47
+39
+30
+16
+8
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+8
+22
+104
+151
+175
+187
+195
+195
+194
+194
+195
+198
+200
+199
+199
+200
+201
+203
+202
+200
+197
+196
+197
+197
+196
+191
+181
+176
+175
+169
+160
+149
+150
+172
+195
+212
+214
+208
+196
+186
+178
+168
+157
+151
+144
+138
+135
+132
+133
+136
+139
+144
+153
+161
+169
+179
+189
+201
+208
+212
+214
+214
+213
+209
+203
+195
+186
+178
+174
+170
+167
+163
+157
+153
+150
+147
+145
+145
+146
+148
+151
+156
+163
+167
+170
+172
+173
+174
+174
+173
+171
+169
+166
+163
+160
+156
+152
+147
+144
+141
+139
+137
+135
+134
+133
+133
+132
+132
+132
+132
+132
+133
+133
+134
+135
+136
+137
+141
+144
+148
+153
+159
+167
+174
+182
+189
+196
+201
+201
+199
+195
+191
+181
+170
+158
+145
+133
+124
+120
+118
+118
+118
+120
+122
+125
+129
+134
+142
+149
+158
+166
+174
+184
+191
+196
+199
+202
+205
+206
+207
+207
+208
+208
+209
+209
+209
+209
+209
+209
+209
+209
+209
+208
+207
+206
+204
+202
+197
+191
+184
+175
+164
+149
+137
+127
+119
+114
+110
+109
+110
+112
+115
+125
+135
+148
+161
+174
+188
+196
+201
+205
+207
+210
+212
+214
+215
+215
+215
+215
+213
+209
+203
+197
+188
+182
+180
+182
+188
+186
+182
+173
+154
+82
+36
+12
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+85
+86
+86
+85
+83
+74
+70
+67
+65
+65
+69
+73
+77
+80
+82
+78
+72
+64
+54
+41
+22
+11
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+12
+36
+129
+164
+182
+190
+196
+194
+192
+193
+195
+198
+200
+199
+199
+200
+202
+204
+203
+200
+198
+198
+199
+199
+197
+193
+185
+179
+176
+168
+158
+149
+150
+174
+197
+212
+213
+208
+196
+187
+178
+168
+157
+150
+142
+135
+131
+126
+124
+124
+125
+127
+132
+138
+146
+155
+165
+182
+194
+204
+212
+214
+215
+214
+213
+210
+204
+190
+181
+175
+171
+168
+166
+163
+160
+157
+152
+147
+145
+143
+142
+142
+141
+142
+142
+142
+142
+142
+142
+141
+141
+140
+139
+138
+137
+136
+136
+136
+135
+135
+135
+134
+134
+134
+134
+134
+134
+135
+135
+136
+137
+138
+141
+144
+147
+151
+155
+163
+171
+179
+187
+195
+203
+207
+210
+212
+211
+201
+185
+169
+153
+140
+128
+123
+119
+116
+115
+115
+115
+116
+117
+119
+125
+133
+143
+155
+167
+182
+191
+197
+201
+204
+206
+207
+208
+208
+209
+209
+209
+209
+209
+210
+210
+210
+210
+210
+210
+210
+210
+210
+210
+210
+210
+210
+210
+210
+210
+208
+206
+201
+195
+186
+171
+157
+142
+129
+119
+111
+108
+108
+108
+110
+116
+126
+137
+150
+164
+181
+190
+198
+202
+206
+209
+212
+214
+215
+215
+215
+215
+213
+208
+203
+195
+187
+182
+182
+184
+189
+185
+180
+168
+142
+66
+26
+7
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+83
+84
+85
+85
+84
+77
+73
+71
+71
+74
+94
+102
+106
+106
+105
+95
+86
+74
+60
+45
+25
+12
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+4
+19
+55
+150
+175
+187
+192
+196
+193
+191
+192
+194
+198
+198
+198
+199
+201
+204
+205
+203
+201
+201
+201
+202
+202
+199
+194
+187
+178
+173
+164
+155
+148
+150
+176
+198
+212
+213
+209
+200
+190
+180
+172
+160
+152
+144
+137
+131
+126
+122
+120
+119
+118
+119
+120
+122
+126
+131
+143
+155
+170
+184
+199
+210
+213
+214
+214
+214
+212
+206
+198
+188
+179
+172
+169
+166
+165
+163
+160
+158
+156
+153
+151
+149
+147
+146
+145
+144
+143
+142
+142
+141
+140
+140
+140
+140
+140
+140
+140
+140
+141
+142
+143
+143
+144
+145
+147
+149
+152
+154
+157
+161
+167
+175
+182
+189
+195
+201
+208
+211
+213
+214
+213
+199
+180
+162
+146
+136
+129
+124
+121
+118
+116
+114
+113
+113
+113
+114
+117
+124
+134
+146
+161
+180
+190
+197
+202
+205
+207
+207
+208
+208
+209
+209
+209
+209
+209
+210
+210
+210
+210
+210
+210
+210
+210
+210
+210
+210
+210
+210
+210
+210
+211
+211
+211
+211
+211
+211
+211
+210
+210
+208
+204
+194
+182
+167
+150
+134
+117
+110
+107
+106
+106
+109
+116
+126
+138
+151
+170
+183
+192
+199
+204
+208
+211
+213
+215
+216
+216
+215
+212
+207
+202
+192
+185
+183
+183
+187
+189
+184
+177
+159
+121
+45
+16
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+83
+85
+86
+87
+86
+82
+79
+78
+81
+91
+112
+116
+117
+116
+111
+99
+87
+72
+57
+40
+23
+11
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+5
+23
+64
+157
+177
+187
+192
+196
+193
+191
+191
+192
+195
+196
+197
+200
+203
+206
+206
+204
+203
+203
+204
+204
+202
+198
+191
+182
+172
+167
+160
+153
+148
+150
+175
+197
+211
+213
+210
+203
+196
+188
+179
+167
+158
+150
+143
+137
+130
+126
+123
+121
+119
+118
+118
+118
+119
+121
+125
+130
+138
+149
+163
+183
+195
+205
+211
+214
+214
+212
+209
+205
+200
+191
+184
+177
+172
+168
+164
+162
+160
+159
+157
+155
+153
+152
+151
+150
+149
+149
+149
+149
+148
+148
+148
+148
+148
+148
+149
+149
+150
+151
+153
+156
+159
+163
+168
+173
+180
+185
+190
+195
+199
+203
+205
+207
+208
+206
+188
+171
+159
+152
+149
+144
+139
+133
+128
+123
+119
+115
+112
+111
+111
+111
+113
+119
+128
+139
+157
+169
+179
+187
+193
+200
+203
+205
+207
+208
+208
+209
+209
+209
+210
+210
+211
+211
+211
+212
+212
+212
+213
+213
+213
+213
+213
+213
+213
+212
+212
+212
+212
+211
+211
+211
+211
+211
+211
+211
+211
+211
+210
+210
+208
+203
+195
+182
+167
+149
+126
+115
+108
+105
+104
+106
+111
+119
+130
+142
+163
+177
+188
+196
+202
+207
+211
+213
+215
+216
+216
+215
+211
+206
+201
+190
+185
+183
+185
+189
+188
+182
+172
+148
+101
+31
+11
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+83
+86
+89
+90
+90
+87
+85
+85
+91
+107
+124
+126
+126
+122
+114
+99
+83
+66
+50
+35
+18
+9
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+5
+24
+68
+158
+177
+187
+192
+196
+194
+192
+191
+191
+193
+196
+198
+202
+206
+207
+207
+205
+205
+206
+206
+204
+199
+191
+181
+170
+164
+161
+156
+151
+147
+149
+173
+194
+209
+211
+210
+206
+201
+195
+189
+178
+170
+162
+155
+148
+139
+134
+130
+126
+123
+120
+118
+117
+117
+117
+117
+119
+122
+127
+135
+150
+163
+177
+190
+201
+209
+212
+213
+213
+211
+205
+200
+195
+190
+185
+178
+174
+171
+169
+166
+164
+162
+161
+160
+159
+158
+157
+157
+156
+157
+157
+158
+159
+161
+162
+166
+169
+172
+175
+178
+183
+186
+190
+193
+197
+201
+204
+205
+202
+193
+173
+167
+165
+164
+163
+153
+142
+135
+129
+126
+123
+120
+116
+113
+110
+109
+107
+108
+112
+118
+131
+142
+154
+164
+175
+188
+195
+201
+204
+206
+208
+208
+209
+209
+210
+210
+211
+211
+212
+213
+213
+214
+214
+214
+215
+215
+215
+215
+215
+216
+216
+216
+215
+215
+215
+215
+214
+214
+213
+213
+212
+212
+212
+211
+211
+211
+211
+211
+211
+210
+208
+203
+194
+181
+164
+137
+121
+111
+105
+103
+104
+108
+114
+123
+135
+155
+171
+184
+194
+201
+207
+210
+213
+215
+216
+216
+215
+210
+205
+199
+188
+185
+184
+186
+190
+186
+180
+165
+135
+82
+20
+7
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+83
+89
+93
+95
+96
+93
+92
+94
+103
+122
+132
+133
+131
+124
+113
+93
+74
+56
+41
+28
+14
+6
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+5
+23
+66
+156
+175
+185
+191
+196
+196
+193
+192
+192
+194
+197
+201
+205
+208
+208
+208
+208
+208
+207
+206
+199
+188
+175
+163
+154
+154
+155
+154
+150
+146
+147
+168
+190
+206
+209
+209
+208
+205
+202
+199
+191
+185
+178
+171
+165
+154
+148
+142
+137
+132
+126
+123
+120
+118
+117
+116
+116
+116
+117
+118
+123
+132
+144
+159
+174
+191
+200
+206
+210
+212
+213
+213
+211
+208
+203
+197
+192
+188
+184
+182
+178
+177
+175
+174
+173
+172
+171
+171
+172
+172
+174
+176
+178
+180
+183
+187
+192
+196
+200
+204
+207
+206
+203
+199
+194
+189
+186
+183
+176
+162
+132
+125
+122
+122
+122
+124
+124
+123
+121
+117
+113
+109
+106
+103
+103
+108
+114
+122
+133
+145
+165
+180
+191
+199
+203
+206
+207
+208
+208
+209
+210
+210
+211
+211
+212
+213
+214
+214
+215
+216
+216
+217
+217
+217
+217
+218
+218
+218
+218
+218
+218
+218
+217
+217
+217
+217
+217
+216
+216
+215
+214
+214
+213
+212
+212
+211
+211
+211
+211
+210
+210
+208
+203
+193
+177
+149
+129
+115
+106
+102
+102
+105
+110
+118
+128
+149
+166
+181
+192
+200
+206
+210
+213
+215
+216
+217
+214
+209
+203
+196
+186
+185
+185
+188
+191
+184
+177
+156
+119
+62
+12
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+84
+93
+99
+102
+102
+99
+98
+105
+117
+134
+139
+138
+132
+121
+107
+80
+60
+44
+31
+18
+10
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+4
+20
+58
+150
+171
+182
+189
+197
+198
+197
+195
+195
+196
+202
+206
+209
+210
+210
+210
+210
+209
+207
+203
+185
+165
+149
+138
+132
+144
+150
+151
+149
+145
+145
+162
+184
+203
+207
+208
+208
+207
+206
+206
+203
+201
+197
+192
+186
+176
+168
+160
+153
+146
+138
+132
+128
+124
+120
+117
+116
+115
+115
+115
+115
+116
+118
+123
+132
+152
+169
+184
+197
+206
+212
+214
+214
+214
+214
+214
+213
+211
+208
+204
+200
+198
+196
+195
+195
+197
+198
+200
+201
+202
+205
+207
+209
+210
+211
+212
+213
+213
+212
+212
+208
+198
+181
+160
+138
+117
+110
+108
+111
+119
+129
+136
+138
+138
+133
+126
+118
+109
+100
+96
+93
+94
+95
+99
+106
+127
+149
+169
+186
+197
+203
+205
+207
+207
+208
+208
+209
+209
+210
+211
+212
+213
+214
+215
+216
+217
+217
+217
+218
+218
+218
+218
+218
+218
+218
+218
+218
+218
+218
+218
+218
+218
+218
+218
+218
+218
+218
+218
+218
+217
+217
+216
+215
+214
+213
+212
+211
+211
+211
+211
+210
+210
+207
+201
+189
+162
+139
+121
+108
+102
+100
+103
+107
+113
+122
+143
+163
+179
+191
+199
+206
+211
+214
+215
+216
+217
+213
+207
+201
+193
+186
+185
+187
+189
+191
+182
+173
+145
+101
+43
+7
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+85
+99
+106
+109
+109
+108
+110
+120
+133
+143
+144
+138
+128
+111
+87
+55
+42
+29
+19
+10
+4
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+14
+43
+133
+160
+173
+181
+192
+199
+200
+201
+202
+204
+209
+210
+211
+211
+211
+211
+209
+205
+194
+176
+141
+120
+108
+103
+103
+128
+142
+148
+148
+144
+142
+150
+172
+193
+201
+204
+206
+207
+207
+207
+207
+207
+207
+207
+206
+202
+197
+190
+183
+175
+165
+157
+150
+143
+136
+130
+125
+121
+119
+116
+115
+114
+114
+114
+114
+117
+120
+127
+136
+149
+167
+180
+192
+201
+208
+213
+216
+218
+220
+221
+221
+220
+219
+218
+217
+215
+215
+215
+215
+215
+214
+213
+212
+209
+205
+193
+175
+156
+137
+122
+106
+105
+108
+116
+129
+144
+148
+149
+149
+145
+137
+124
+111
+99
+92
+90
+89
+89
+90
+93
+102
+118
+139
+162
+183
+197
+202
+205
+206
+207
+208
+208
+209
+209
+210
+211
+213
+214
+215
+216
+217
+217
+217
+218
+218
+218
+218
+218
+218
+218
+219
+219
+219
+219
+219
+219
+219
+219
+219
+219
+219
+219
+219
+219
+219
+219
+219
+219
+218
+218
+218
+218
+217
+216
+215
+214
+212
+212
+211
+211
+210
+210
+210
+207
+200
+176
+151
+130
+113
+102
+99
+101
+104
+108
+116
+139
+160
+177
+190
+199
+207
+211
+214
+216
+217
+216
+211
+205
+197
+190
+186
+186
+189
+190
+189
+178
+163
+124
+73
+23
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+86
+102
+110
+113
+114
+115
+121
+131
+141
+147
+145
+134
+116
+94
+72
+53
+39
+25
+15
+8
+3
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+9
+29
+114
+148
+163
+169
+177
+196
+202
+204
+206
+209
+211
+212
+212
+212
+211
+209
+202
+187
+166
+140
+116
+105
+98
+95
+95
+110
+132
+142
+145
+144
+140
+142
+159
+179
+191
+196
+201
+204
+205
+205
+207
+207
+208
+208
+208
+207
+205
+202
+198
+192
+183
+176
+169
+161
+154
+145
+140
+135
+130
+127
+122
+119
+117
+115
+114
+114
+115
+117
+119
+123
+129
+135
+142
+150
+159
+169
+176
+183
+188
+193
+196
+199
+200
+202
+202
+201
+198
+192
+184
+174
+160
+152
+144
+137
+130
+125
+124
+127
+131
+136
+142
+144
+145
+146
+149
+149
+141
+131
+120
+109
+101
+97
+93
+90
+89
+89
+94
+102
+114
+131
+158
+172
+184
+193
+200
+204
+206
+207
+208
+208
+209
+210
+212
+213
+214
+215
+216
+216
+217
+217
+218
+218
+218
+218
+218
+219
+219
+219
+220
+221
+222
+222
+223
+223
+224
+224
+224
+224
+224
+224
+223
+222
+221
+221
+220
+220
+219
+219
+219
+219
+219
+218
+218
+218
+217
+215
+214
+213
+212
+211
+210
+210
+210
+208
+205
+185
+160
+137
+118
+104
+99
+101
+102
+106
+113
+137
+159
+177
+191
+200
+208
+212
+215
+216
+217
+215
+209
+202
+195
+188
+186
+187
+190
+190
+185
+174
+150
+104
+53
+14
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+87
+105
+114
+117
+118
+122
+131
+141
+147
+150
+143
+126
+106
+87
+71
+57
+44
+30
+17
+9
+3
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+5
+16
+89
+134
+152
+156
+160
+180
+196
+203
+207
+210
+211
+212
+212
+211
+209
+198
+182
+160
+138
+121
+106
+99
+95
+92
+91
+98
+117
+133
+143
+144
+138
+137
+147
+162
+176
+182
+189
+194
+197
+198
+202
+204
+206
+207
+208
+208
+209
+208
+206
+203
+196
+191
+184
+176
+169
+159
+153
+147
+142
+139
+134
+130
+126
+123
+120
+117
+116
+114
+114
+113
+114
+116
+119
+123
+128
+134
+139
+143
+146
+149
+151
+153
+154
+154
+152
+149
+146
+143
+138
+132
+127
+127
+128
+128
+127
+129
+133
+139
+146
+152
+157
+157
+154
+148
+139
+125
+115
+107
+98
+91
+87
+87
+88
+91
+96
+107
+122
+138
+155
+171
+190
+198
+202
+205
+206
+207
+208
+209
+210
+211
+213
+214
+215
+216
+216
+217
+217
+218
+218
+218
+218
+218
+219
+220
+220
+221
+222
+223
+224
+225
+227
+227
+228
+229
+229
+230
+229
+229
+229
+229
+228
+227
+226
+225
+224
+223
+222
+221
+220
+219
+219
+219
+219
+219
+218
+217
+216
+214
+212
+211
+210
+210
+210
+209
+207
+192
+168
+144
+122
+106
+99
+100
+101
+104
+110
+137
+160
+179
+192
+201
+209
+213
+215
+216
+216
+213
+206
+199
+192
+187
+187
+189
+191
+189
+181
+169
+133
+83
+36
+7
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+88
+109
+118
+121
+122
+130
+141
+148
+151
+151
+138
+118
+102
+90
+83
+73
+60
+45
+31
+18
+7
+3
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+7
+59
+115
+140
+146
+145
+157
+180
+194
+202
+207
+209
+209
+208
+205
+199
+178
+155
+135
+120
+114
+108
+104
+101
+98
+93
+93
+104
+122
+138
+143
+137
+133
+135
+143
+156
+163
+170
+176
+180
+182
+189
+193
+196
+200
+203
+205
+207
+209
+209
+208
+205
+201
+196
+190
+182
+173
+166
+159
+153
+149
+145
+142
+138
+135
+131
+126
+123
+120
+118
+117
+115
+114
+114
+114
+114
+114
+114
+115
+115
+115
+114
+114
+114
+113
+112
+111
+111
+112
+113
+115
+123
+132
+140
+148
+153
+159
+161
+163
+163
+162
+156
+149
+140
+129
+114
+96
+90
+87
+86
+86
+88
+91
+96
+105
+117
+140
+160
+177
+192
+200
+205
+206
+207
+208
+208
+209
+210
+212
+213
+214
+216
+217
+217
+217
+217
+218
+218
+218
+218
+219
+219
+220
+221
+222
+223
+225
+226
+227
+229
+230
+231
+232
+232
+233
+233
+233
+233
+233
+233
+233
+232
+231
+231
+230
+228
+227
+225
+224
+222
+221
+220
+219
+219
+219
+219
+218
+217
+215
+213
+212
+211
+210
+210
+210
+209
+197
+175
+150
+127
+107
+99
+99
+100
+103
+109
+138
+162
+180
+194
+203
+210
+214
+216
+216
+216
+211
+203
+196
+190
+187
+187
+190
+191
+187
+177
+160
+112
+62
+22
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+90
+112
+121
+124
+126
+138
+148
+153
+153
+150
+130
+113
+106
+105
+106
+105
+89
+76
+60
+39
+16
+6
+2
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+25
+92
+127
+139
+137
+132
+149
+172
+192
+198
+204
+204
+200
+192
+178
+148
+130
+122
+118
+116
+117
+121
+121
+114
+100
+93
+95
+109
+126
+139
+140
+132
+128
+128
+133
+140
+144
+148
+153
+154
+160
+167
+174
+181
+189
+196
+202
+206
+209
+210
+211
+210
+208
+203
+196
+187
+178
+169
+161
+155
+151
+149
+147
+146
+144
+141
+138
+135
+132
+130
+126
+123
+120
+118
+116
+115
+114
+114
+113
+113
+114
+115
+117
+121
+126
+135
+141
+145
+148
+151
+155
+159
+161
+163
+165
+166
+166
+165
+163
+159
+143
+124
+108
+96
+89
+86
+85
+85
+86
+87
+95
+102
+116
+133
+154
+184
+195
+202
+205
+206
+207
+207
+208
+209
+210
+213
+215
+216
+217
+217
+217
+217
+218
+218
+218
+218
+218
+219
+220
+221
+222
+223
+224
+225
+226
+228
+229
+230
+230
+231
+232
+233
+233
+234
+234
+234
+234
+234
+234
+233
+233
+233
+232
+232
+231
+230
+229
+228
+226
+224
+221
+220
+220
+219
+219
+219
+218
+217
+215
+212
+211
+210
+210
+210
+209
+201
+180
+156
+131
+109
+99
+99
+100
+103
+109
+141
+165
+183
+196
+204
+212
+215
+216
+216
+216
+208
+200
+193
+189
+187
+188
+192
+190
+184
+173
+146
+89
+42
+11
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+93
+116
+126
+128
+131
+145
+153
+156
+154
+146
+124
+120
+121
+124
+125
+119
+110
+103
+92
+73
+49
+27
+12
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+4
+38
+90
+133
+139
+119
+117
+124
+137
+152
+159
+162
+159
+151
+136
+126
+124
+123
+125
+134
+147
+150
+152
+150
+144
+114
+100
+98
+108
+132
+140
+137
+130
+122
+121
+119
+118
+118
+118
+117
+117
+119
+122
+127
+134
+149
+164
+180
+194
+204
+211
+214
+216
+216
+213
+208
+202
+193
+183
+172
+161
+156
+152
+150
+149
+148
+147
+146
+145
+145
+144
+144
+143
+143
+143
+143
+143
+143
+144
+144
+145
+147
+149
+151
+153
+155
+155
+157
+159
+163
+167
+170
+173
+174
+174
+170
+165
+155
+142
+125
+105
+97
+91
+88
+86
+85
+87
+89
+94
+103
+118
+139
+161
+182
+197
+204
+206
+207
+207
+208
+209
+210
+212
+214
+216
+217
+217
+217
+217
+217
+218
+218
+218
+218
+219
+220
+221
+222
+223
+224
+224
+225
+226
+226
+227
+228
+229
+230
+231
+232
+232
+233
+233
+233
+233
+233
+232
+232
+232
+232
+232
+232
+232
+232
+231
+231
+230
+229
+229
+228
+225
+223
+221
+220
+220
+219
+219
+218
+216
+214
+211
+210
+210
+210
+210
+204
+186
+161
+135
+112
+100
+99
+99
+103
+112
+148
+171
+187
+199
+207
+213
+216
+217
+216
+214
+203
+195
+191
+188
+188
+191
+192
+185
+175
+166
+115
+58
+22
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+93
+118
+129
+131
+133
+148
+155
+157
+153
+142
+128
+129
+132
+136
+137
+131
+123
+115
+105
+91
+72
+52
+32
+15
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+14
+51
+97
+135
+130
+117
+113
+117
+126
+138
+140
+138
+134
+129
+126
+126
+130
+137
+144
+150
+152
+154
+154
+154
+142
+122
+106
+101
+112
+137
+138
+132
+124
+120
+117
+114
+113
+112
+112
+110
+110
+110
+110
+111
+114
+122
+134
+149
+166
+188
+200
+207
+212
+214
+213
+211
+207
+201
+194
+179
+171
+164
+158
+154
+152
+150
+149
+148
+148
+147
+147
+146
+146
+146
+146
+147
+147
+148
+149
+150
+152
+154
+157
+159
+163
+166
+169
+172
+174
+176
+177
+177
+175
+171
+161
+149
+137
+124
+112
+99
+93
+89
+87
+86
+88
+93
+100
+110
+124
+152
+173
+188
+198
+204
+206
+207
+208
+208
+210
+212
+214
+215
+216
+217
+217
+217
+217
+217
+218
+218
+218
+219
+220
+221
+222
+222
+223
+223
+224
+224
+225
+225
+225
+226
+227
+228
+229
+229
+230
+230
+230
+230
+229
+229
+229
+229
+228
+228
+229
+229
+229
+230
+230
+230
+230
+230
+230
+229
+228
+227
+225
+223
+221
+220
+220
+219
+219
+217
+214
+212
+211
+210
+210
+210
+205
+188
+164
+137
+113
+100
+99
+99
+104
+117
+155
+176
+191
+202
+209
+214
+216
+216
+215
+210
+199
+193
+189
+188
+189
+192
+192
+182
+168
+153
+85
+38
+12
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+93
+120
+131
+133
+135
+149
+156
+158
+153
+141
+133
+136
+140
+144
+144
+141
+135
+128
+118
+105
+85
+70
+52
+32
+12
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+22
+56
+105
+134
+125
+115
+110
+112
+120
+126
+128
+129
+128
+128
+132
+137
+143
+148
+150
+152
+154
+156
+157
+155
+142
+123
+106
+101
+122
+134
+135
+129
+121
+117
+114
+112
+111
+110
+108
+106
+105
+103
+102
+100
+101
+105
+112
+122
+145
+167
+184
+198
+207
+213
+214
+213
+211
+207
+197
+188
+179
+171
+165
+160
+157
+156
+154
+153
+152
+151
+151
+151
+151
+151
+152
+153
+154
+155
+158
+160
+163
+165
+168
+171
+174
+177
+179
+180
+181
+179
+176
+172
+165
+151
+139
+127
+115
+104
+94
+90
+88
+88
+89
+95
+103
+116
+132
+152
+180
+194
+201
+205
+206
+207
+208
+210
+211
+213
+215
+216
+217
+217
+217
+217
+217
+217
+218
+218
+219
+220
+220
+221
+222
+223
+223
+223
+223
+223
+223
+223
+223
+224
+225
+226
+227
+228
+228
+228
+228
+228
+228
+227
+227
+227
+227
+227
+227
+227
+227
+227
+228
+228
+229
+229
+229
+229
+229
+228
+228
+226
+225
+223
+221
+220
+220
+219
+218
+215
+212
+211
+210
+210
+210
+206
+189
+165
+138
+114
+101
+99
+100
+107
+123
+163
+182
+195
+204
+211
+216
+216
+216
+213
+207
+195
+191
+189
+189
+190
+193
+188
+177
+159
+132
+58
+23
+6
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+93
+121
+132
+135
+137
+149
+156
+158
+153
+141
+137
+142
+147
+149
+150
+149
+145
+139
+130
+117
+95
+81
+67
+50
+27
+4
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+4
+20
+58
+117
+128
+123
+114
+109
+108
+117
+123
+128
+130
+131
+137
+142
+145
+147
+149
+151
+153
+155
+157
+158
+156
+142
+121
+100
+103
+124
+135
+136
+126
+119
+116
+113
+112
+110
+109
+108
+106
+104
+102
+97
+94
+91
+89
+88
+101
+125
+149
+171
+189
+207
+212
+213
+214
+214
+209
+203
+195
+187
+178
+170
+166
+164
+161
+160
+158
+157
+156
+156
+156
+156
+157
+158
+160
+162
+166
+168
+171
+173
+176
+179
+180
+182
+183
+183
+182
+179
+174
+167
+158
+143
+132
+120
+109
+99
+90
+89
+89
+90
+94
+105
+119
+137
+158
+180
+199
+204
+206
+207
+207
+209
+210
+212
+214
+216
+217
+217
+217
+217
+217
+217
+217
+218
+218
+219
+220
+221
+221
+222
+222
+222
+222
+222
+221
+221
+221
+221
+222
+223
+224
+226
+226
+227
+227
+227
+227
+227
+227
+227
+227
+226
+226
+226
+226
+226
+226
+226
+226
+226
+227
+228
+228
+229
+229
+228
+228
+227
+226
+224
+222
+220
+220
+219
+218
+215
+212
+211
+210
+210
+210
+206
+190
+165
+138
+115
+101
+99
+101
+110
+133
+171
+187
+199
+207
+212
+216
+216
+215
+210
+202
+192
+190
+189
+190
+191
+192
+181
+169
+146
+106
+34
+12
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+91
+121
+133
+137
+138
+149
+156
+157
+153
+142
+141
+148
+152
+154
+154
+153
+152
+148
+141
+129
+104
+88
+75
+63
+50
+11
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+7
+65
+114
+131
+128
+117
+106
+107
+115
+125
+132
+137
+140
+142
+144
+145
+146
+148
+150
+154
+157
+159
+158
+155
+142
+111
+93
+107
+127
+140
+137
+123
+120
+117
+114
+113
+113
+112
+112
+110
+108
+100
+95
+90
+85
+81
+77
+85
+105
+130
+157
+191
+205
+211
+213
+215
+213
+211
+207
+201
+192
+182
+176
+171
+169
+167
+164
+163
+162
+161
+161
+161
+162
+163
+165
+167
+169
+171
+174
+177
+179
+183
+185
+186
+187
+186
+183
+178
+172
+163
+153
+138
+125
+112
+101
+94
+90
+90
+92
+96
+102
+119
+140
+162
+183
+200
+205
+206
+207
+208
+209
+211
+214
+216
+217
+217
+217
+217
+217
+217
+217
+217
+218
+219
+219
+220
+221
+221
+221
+222
+221
+221
+220
+219
+219
+219
+220
+221
+222
+223
+225
+226
+226
+227
+227
+227
+227
+227
+227
+227
+227
+227
+227
+226
+226
+226
+226
+226
+226
+226
+226
+226
+227
+227
+228
+228
+228
+227
+226
+225
+223
+221
+220
+220
+218
+215
+212
+211
+210
+210
+210
+206
+189
+165
+138
+115
+101
+100
+103
+116
+144
+179
+193
+203
+209
+215
+216
+216
+213
+207
+197
+190
+189
+189
+191
+193
+191
+174
+157
+129
+74
+16
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+87
+118
+133
+137
+139
+148
+156
+157
+153
+146
+146
+152
+155
+155
+155
+154
+154
+153
+152
+150
+127
+101
+82
+68
+61
+35
+12
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+4
+34
+81
+121
+133
+127
+115
+111
+113
+118
+127
+134
+138
+139
+139
+139
+141
+145
+151
+157
+160
+160
+159
+156
+149
+99
+91
+100
+119
+141
+139
+130
+125
+122
+120
+122
+125
+127
+129
+129
+124
+117
+106
+93
+82
+74
+69
+67
+73
+91
+137
+167
+190
+204
+212
+215
+213
+213
+211
+207
+198
+189
+182
+176
+172
+169
+167
+165
+164
+163
+164
+165
+166
+169
+171
+176
+179
+182
+184
+186
+188
+188
+188
+188
+187
+182
+176
+169
+159
+148
+131
+118
+107
+98
+93
+91
+93
+97
+105
+118
+147
+170
+189
+202
+206
+207
+207
+209
+210
+212
+216
+216
+217
+217
+217
+217
+217
+217
+217
+217
+218
+219
+219
+220
+220
+220
+220
+220
+219
+218
+217
+218
+218
+219
+219
+220
+222
+223
+225
+225
+226
+226
+226
+227
+227
+227
+227
+227
+227
+227
+227
+227
+227
+227
+227
+227
+226
+226
+226
+226
+226
+226
+226
+227
+227
+227
+227
+226
+225
+224
+222
+221
+220
+218
+215
+212
+211
+210
+210
+210
+206
+187
+161
+135
+114
+101
+102
+109
+128
+162
+189
+199
+207
+213
+216
+216
+215
+208
+200
+192
+189
+189
+190
+192
+192
+182
+165
+136
+94
+37
+5
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+84
+113
+130
+137
+140
+147
+155
+157
+154
+148
+149
+154
+155
+155
+154
+154
+154
+154
+155
+154
+146
+120
+93
+71
+62
+47
+21
+7
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+10
+28
+56
+94
+119
+122
+123
+123
+123
+124
+126
+128
+128
+128
+130
+136
+142
+148
+155
+161
+161
+160
+159
+156
+132
+102
+91
+97
+114
+139
+137
+134
+130
+127
+128
+130
+132
+133
+133
+132
+131
+126
+117
+103
+81
+71
+64
+62
+63
+83
+114
+146
+177
+202
+213
+213
+213
+212
+210
+206
+202
+195
+188
+181
+176
+173
+171
+169
+168
+168
+168
+170
+172
+174
+179
+181
+184
+186
+188
+189
+189
+190
+189
+187
+182
+175
+167
+157
+145
+127
+114
+104
+97
+93
+93
+97
+105
+119
+138
+168
+187
+199
+205
+207
+208
+209
+211
+213
+215
+216
+217
+217
+217
+217
+217
+217
+217
+217
+218
+219
+219
+219
+220
+220
+219
+218
+217
+217
+217
+217
+217
+218
+219
+220
+222
+224
+225
+226
+226
+226
+226
+227
+227
+227
+227
+227
+227
+227
+227
+227
+227
+227
+227
+227
+227
+227
+227
+226
+226
+226
+226
+226
+226
+227
+227
+226
+226
+225
+224
+222
+222
+220
+218
+215
+211
+211
+210
+210
+210
+204
+184
+158
+132
+112
+102
+103
+118
+142
+175
+195
+203
+210
+215
+216
+216
+211
+204
+196
+191
+190
+190
+191
+192
+191
+169
+152
+113
+64
+19
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+82
+107
+126
+137
+140
+147
+155
+157
+154
+149
+152
+155
+155
+155
+154
+154
+154
+155
+157
+158
+156
+138
+108
+77
+60
+52
+33
+14
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+5
+18
+42
+70
+94
+109
+118
+123
+128
+130
+131
+131
+132
+134
+139
+144
+149
+154
+160
+161
+162
+161
+159
+150
+123
+100
+87
+92
+117
+132
+137
+137
+134
+133
+133
+134
+135
+135
+136
+136
+136
+132
+124
+103
+84
+69
+58
+52
+54
+71
+98
+133
+171
+204
+210
+213
+213
+212
+210
+208
+203
+198
+191
+183
+179
+176
+174
+172
+170
+171
+171
+173
+176
+180
+184
+186
+188
+190
+190
+191
+190
+190
+188
+181
+174
+165
+154
+142
+123
+111
+102
+96
+93
+95
+103
+116
+134
+156
+184
+198
+204
+207
+208
+209
+211
+213
+215
+216
+217
+217
+217
+217
+217
+217
+217
+217
+218
+218
+219
+219
+219
+219
+218
+217
+216
+216
+216
+216
+217
+218
+219
+221
+223
+225
+225
+226
+226
+226
+226
+226
+226
+226
+226
+226
+226
+226
+226
+227
+227
+227
+227
+227
+227
+227
+227
+227
+227
+226
+226
+226
+226
+226
+226
+226
+226
+226
+225
+224
+223
+222
+220
+217
+214
+211
+211
+210
+210
+209
+201
+179
+154
+129
+109
+104
+107
+129
+159
+185
+199
+207
+213
+216
+216
+214
+207
+199
+193
+190
+190
+191
+192
+190
+184
+160
+133
+87
+39
+9
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+81
+102
+121
+135
+141
+147
+154
+157
+155
+151
+154
+155
+155
+154
+153
+153
+154
+156
+159
+161
+161
+153
+125
+89
+58
+51
+42
+22
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+19
+48
+70
+87
+101
+117
+125
+130
+135
+139
+143
+147
+150
+153
+155
+159
+161
+162
+162
+160
+158
+145
+120
+94
+80
+89
+113
+129
+138
+140
+137
+137
+136
+136
+136
+136
+137
+139
+139
+139
+128
+106
+83
+64
+51
+43
+44
+58
+85
+124
+180
+199
+210
+214
+214
+212
+210
+208
+205
+200
+191
+186
+181
+178
+175
+173
+172
+173
+174
+177
+182
+185
+188
+191
+191
+191
+191
+191
+190
+188
+181
+173
+163
+152
+139
+120
+109
+100
+96
+94
+100
+111
+128
+149
+172
+196
+204
+207
+208
+209
+210
+213
+215
+216
+217
+217
+217
+217
+217
+217
+217
+217
+218
+218
+218
+219
+218
+218
+217
+216
+215
+215
+215
+215
+216
+218
+219
+221
+223
+225
+226
+226
+226
+226
+226
+226
+226
+226
+226
+225
+225
+225
+225
+226
+226
+226
+226
+226
+227
+227
+227
+227
+227
+227
+227
+226
+226
+226
+226
+226
+226
+226
+225
+225
+223
+223
+222
+219
+216
+213
+211
+210
+210
+210
+209
+197
+173
+148
+126
+108
+106
+115
+144
+175
+193
+203
+211
+215
+216
+216
+211
+201
+195
+191
+190
+190
+192
+191
+186
+173
+151
+107
+59
+20
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+80
+96
+115
+132
+142
+147
+154
+157
+155
+152
+155
+156
+155
+153
+153
+153
+154
+158
+162
+165
+166
+162
+143
+108
+57
+43
+43
+26
+7
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+7
+18
+39
+72
+91
+109
+124
+138
+151
+155
+157
+157
+157
+159
+160
+162
+162
+162
+160
+157
+144
+120
+82
+72
+79
+103
+128
+141
+142
+140
+139
+137
+136
+136
+138
+139
+141
+142
+142
+133
+110
+82
+54
+41
+37
+37
+44
+65
+133
+177
+202
+213
+215
+214
+211
+210
+208
+206
+199
+192
+187
+182
+178
+175
+174
+175
+176
+178
+183
+187
+190
+191
+192
+192
+192
+191
+190
+187
+180
+172
+162
+150
+136
+117
+106
+99
+96
+96
+105
+122
+142
+164
+186
+205
+207
+208
+209
+210
+212
+214
+216
+216
+217
+217
+217
+217
+217
+217
+217
+217
+218
+218
+218
+218
+217
+216
+215
+215
+214
+214
+215
+215
+217
+220
+223
+225
+226
+226
+226
+226
+226
+226
+225
+225
+224
+224
+224
+224
+224
+224
+224
+224
+225
+225
+225
+226
+226
+226
+227
+227
+227
+227
+227
+226
+226
+226
+225
+225
+225
+225
+225
+224
+223
+223
+222
+219
+215
+212
+210
+210
+210
+210
+209
+192
+167
+142
+120
+108
+108
+131
+162
+188
+198
+208
+214
+216
+216
+215
+205
+196
+192
+190
+190
+192
+192
+190
+181
+161
+135
+77
+33
+7
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+81
+91
+109
+129
+143
+149
+155
+157
+156
+154
+155
+155
+154
+153
+153
+153
+155
+161
+168
+174
+175
+171
+161
+135
+85
+37
+39
+29
+14
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+3
+7
+15
+29
+48
+72
+106
+127
+141
+151
+155
+157
+159
+160
+161
+162
+161
+160
+158
+150
+130
+77
+67
+66
+80
+113
+141
+142
+143
+142
+140
+138
+139
+140
+142
+144
+145
+143
+135
+117
+85
+44
+36
+32
+30
+31
+52
+103
+156
+197
+215
+216
+214
+212
+210
+209
+206
+202
+196
+191
+185
+180
+177
+176
+177
+178
+184
+187
+190
+192
+192
+193
+192
+192
+190
+187
+180
+171
+160
+147
+133
+114
+104
+98
+97
+100
+117
+137
+158
+180
+199
+207
+208
+209
+210
+211
+214
+216
+216
+217
+217
+217
+217
+217
+217
+217
+217
+217
+218
+217
+217
+216
+215
+214
+214
+213
+214
+214
+216
+219
+222
+225
+226
+226
+226
+226
+226
+225
+224
+224
+223
+223
+223
+223
+223
+223
+223
+222
+222
+222
+222
+222
+223
+223
+224
+225
+226
+227
+227
+227
+227
+227
+226
+225
+225
+225
+225
+225
+224
+224
+223
+223
+220
+217
+213
+211
+210
+210
+210
+208
+205
+181
+159
+133
+113
+109
+118
+159
+184
+198
+203
+214
+216
+216
+214
+210
+196
+192
+191
+191
+191
+192
+190
+179
+164
+151
+89
+38
+11
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+81
+89
+107
+128
+144
+150
+155
+157
+157
+155
+156
+155
+154
+153
+153
+153
+155
+162
+169
+177
+179
+177
+169
+148
+110
+34
+27
+22
+15
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+5
+10
+18
+31
+59
+85
+108
+127
+140
+149
+153
+156
+158
+160
+161
+160
+159
+156
+149
+113
+79
+62
+59
+71
+115
+135
+143
+144
+143
+142
+142
+143
+144
+146
+147
+146
+140
+128
+107
+63
+41
+30
+27
+26
+33
+55
+98
+149
+196
+216
+216
+215
+213
+210
+207
+204
+200
+195
+189
+183
+180
+178
+178
+179
+184
+188
+191
+192
+193
+193
+193
+192
+190
+187
+179
+170
+159
+145
+130
+111
+102
+98
+99
+106
+126
+147
+169
+189
+203
+208
+209
+210
+211
+213
+215
+216
+216
+217
+217
+217
+217
+217
+217
+217
+217
+217
+217
+217
+216
+215
+214
+213
+213
+213
+214
+216
+219
+222
+225
+226
+226
+226
+226
+225
+224
+223
+223
+223
+223
+223
+223
+223
+222
+222
+221
+221
+220
+220
+220
+221
+221
+222
+223
+224
+225
+226
+227
+227
+227
+227
+226
+225
+225
+224
+224
+224
+224
+223
+223
+222
+219
+215
+212
+210
+210
+210
+209
+206
+199
+175
+145
+124
+113
+112
+146
+177
+193
+202
+209
+215
+216
+215
+211
+202
+193
+191
+191
+191
+192
+191
+183
+170
+151
+127
+52
+19
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+81
+87
+106
+129
+145
+151
+156
+157
+157
+155
+156
+155
+154
+153
+153
+154
+155
+161
+169
+179
+182
+180
+175
+160
+129
+38
+22
+17
+14
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+5
+10
+25
+46
+68
+91
+112
+129
+138
+145
+150
+154
+157
+158
+159
+158
+157
+139
+105
+74
+51
+45
+76
+112
+133
+144
+145
+145
+145
+146
+147
+149
+150
+149
+145
+136
+122
+81
+49
+31
+23
+22
+25
+32
+57
+97
+152
+205
+213
+216
+215
+212
+210
+206
+203
+199
+194
+187
+183
+181
+181
+181
+184
+189
+191
+192
+193
+193
+193
+192
+190
+187
+179
+169
+157
+144
+128
+109
+101
+99
+102
+111
+135
+157
+178
+195
+206
+209
+209
+210
+212
+214
+216
+216
+216
+216
+216
+216
+217
+217
+217
+217
+217
+217
+217
+216
+215
+214
+213
+212
+213
+213
+216
+219
+222
+224
+226
+226
+226
+225
+224
+223
+222
+222
+223
+223
+223
+223
+223
+222
+221
+220
+220
+220
+220
+220
+220
+220
+220
+221
+222
+223
+225
+226
+227
+227
+227
+226
+225
+225
+224
+224
+224
+224
+223
+223
+222
+220
+217
+213
+211
+210
+210
+209
+208
+203
+194
+161
+133
+119
+117
+126
+171
+190
+200
+206
+213
+216
+216
+212
+205
+196
+191
+191
+191
+191
+192
+187
+173
+158
+134
+91
+25
+8
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+81
+86
+106
+130
+146
+152
+156
+158
+157
+155
+156
+154
+154
+154
+154
+154
+155
+160
+167
+178
+183
+182
+180
+169
+144
+49
+22
+13
+10
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+6
+16
+32
+52
+75
+99
+114
+126
+135
+142
+149
+153
+155
+157
+158
+154
+132
+97
+60
+34
+39
+77
+111
+136
+145
+147
+148
+149
+150
+152
+153
+152
+149
+142
+131
+98
+61
+35
+20
+17
+20
+22
+31
+54
+98
+177
+203
+214
+217
+215
+212
+209
+206
+203
+199
+192
+187
+184
+183
+183
+184
+189
+191
+193
+193
+193
+193
+192
+190
+187
+179
+169
+156
+142
+126
+108
+101
+100
+106
+117
+143
+165
+185
+200
+208
+209
+210
+211
+213
+215
+216
+216
+216
+216
+216
+216
+216
+217
+217
+217
+217
+216
+216
+215
+214
+212
+212
+212
+213
+214
+218
+221
+224
+225
+226
+225
+224
+223
+222
+221
+221
+222
+223
+223
+223
+223
+222
+221
+220
+220
+220
+220
+220
+220
+220
+220
+220
+221
+221
+223
+225
+226
+227
+227
+227
+226
+225
+224
+224
+224
+223
+223
+223
+222
+221
+218
+214
+212
+210
+210
+209
+209
+206
+199
+184
+143
+125
+119
+126
+149
+189
+198
+205
+210
+215
+216
+213
+206
+198
+192
+191
+191
+191
+191
+190
+178
+162
+142
+108
+52
+8
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+82
+87
+108
+132
+147
+153
+157
+158
+157
+156
+156
+155
+155
+155
+155
+155
+155
+157
+162
+173
+181
+182
+181
+174
+159
+69
+25
+8
+5
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+7
+16
+31
+58
+78
+94
+108
+120
+133
+142
+149
+154
+156
+156
+151
+126
+86
+35
+18
+34
+73
+116
+143
+147
+149
+151
+152
+154
+156
+155
+153
+148
+140
+114
+78
+44
+19
+12
+13
+18
+23
+31
+48
+130
+182
+208
+217
+216
+215
+212
+209
+205
+201
+196
+191
+187
+186
+186
+187
+190
+191
+193
+193
+193
+193
+192
+190
+187
+178
+168
+155
+140
+124
+106
+101
+102
+110
+124
+150
+172
+191
+204
+209
+210
+211
+212
+214
+215
+216
+216
+216
+216
+216
+216
+216
+216
+216
+216
+216
+216
+215
+214
+213
+212
+212
+212
+213
+216
+220
+223
+225
+226
+226
+224
+223
+221
+221
+220
+221
+222
+223
+224
+224
+223
+221
+220
+220
+220
+220
+220
+220
+220
+220
+220
+220
+221
+222
+223
+225
+226
+227
+227
+227
+226
+225
+224
+223
+223
+223
+222
+222
+221
+220
+216
+212
+210
+210
+209
+209
+208
+204
+192
+167
+125
+121
+125
+143
+179
+199
+204
+209
+214
+216
+215
+208
+200
+193
+191
+191
+191
+191
+190
+185
+164
+152
+118
+70
+19
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+83
+90
+113
+136
+147
+154
+157
+158
+157
+156
+156
+155
+156
+157
+157
+155
+155
+155
+157
+162
+178
+182
+182
+178
+165
+86
+31
+8
+3
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+4
+12
+23
+38
+54
+72
+95
+114
+130
+143
+151
+155
+154
+148
+124
+71
+14
+10
+22
+54
+106
+142
+147
+151
+153
+155
+156
+155
+153
+151
+147
+126
+99
+64
+32
+11
+7
+9
+14
+21
+28
+56
+122
+175
+208
+217
+216
+215
+213
+210
+206
+201
+198
+194
+191
+190
+190
+191
+192
+193
+193
+193
+193
+192
+190
+187
+178
+167
+153
+138
+121
+105
+102
+105
+115
+131
+158
+179
+196
+206
+210
+211
+211
+213
+214
+215
+216
+216
+216
+216
+216
+216
+216
+216
+216
+216
+216
+215
+214
+213
+212
+211
+212
+213
+215
+218
+222
+224
+225
+225
+224
+222
+220
+219
+219
+220
+222
+223
+224
+224
+224
+222
+221
+220
+220
+220
+220
+220
+220
+220
+220
+220
+220
+221
+222
+224
+226
+226
+227
+227
+226
+225
+223
+223
+222
+222
+222
+221
+221
+220
+216
+212
+210
+209
+209
+209
+208
+205
+191
+167
+134
+125
+127
+150
+179
+198
+205
+211
+214
+215
+215
+208
+198
+193
+192
+191
+191
+191
+189
+181
+167
+153
+119
+69
+23
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+84
+95
+117
+139
+148
+155
+158
+158
+157
+156
+156
+156
+157
+158
+159
+157
+156
+155
+155
+158
+172
+180
+182
+179
+171
+98
+37
+10
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+4
+8
+14
+23
+36
+60
+83
+106
+127
+141
+151
+153
+150
+134
+97
+22
+9
+9
+23
+52
+108
+133
+145
+151
+154
+155
+154
+152
+150
+146
+129
+103
+71
+38
+13
+6
+6
+9
+13
+22
+40
+79
+136
+187
+212
+216
+216
+215
+213
+210
+204
+201
+198
+195
+193
+193
+193
+193
+194
+194
+194
+193
+192
+190
+187
+178
+166
+153
+137
+120
+105
+103
+108
+119
+135
+162
+183
+198
+208
+210
+211
+212
+213
+214
+215
+216
+216
+216
+216
+216
+216
+216
+216
+216
+216
+216
+215
+214
+213
+211
+211
+212
+213
+215
+219
+223
+224
+224
+224
+223
+220
+219
+218
+219
+220
+223
+224
+224
+224
+224
+222
+221
+221
+220
+220
+220
+220
+220
+220
+220
+220
+221
+222
+224
+225
+226
+226
+226
+226
+225
+223
+222
+222
+221
+221
+221
+221
+219
+216
+212
+210
+209
+209
+208
+208
+206
+193
+169
+146
+132
+129
+151
+174
+194
+204
+210
+213
+215
+214
+211
+199
+194
+192
+192
+191
+191
+188
+180
+169
+159
+128
+76
+35
+8
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+85
+99
+122
+142
+149
+157
+159
+159
+157
+156
+156
+157
+158
+159
+159
+159
+157
+155
+155
+156
+166
+177
+182
+180
+174
+106
+42
+12
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+4
+8
+14
+30
+51
+77
+103
+127
+144
+148
+148
+137
+109
+28
+10
+3
+7
+19
+61
+97
+124
+141
+149
+152
+152
+150
+146
+142
+127
+105
+75
+42
+14
+6
+5
+6
+8
+13
+27
+52
+98
+151
+199
+214
+216
+215
+214
+213
+208
+204
+201
+199
+197
+195
+195
+195
+194
+194
+194
+194
+193
+190
+187
+177
+166
+152
+136
+119
+105
+104
+110
+122
+138
+165
+185
+200
+208
+211
+211
+212
+213
+214
+215
+216
+216
+216
+216
+216
+216
+216
+216
+216
+216
+215
+214
+213
+212
+211
+211
+212
+213
+216
+219
+223
+223
+223
+223
+221
+218
+217
+217
+218
+220
+224
+224
+224
+224
+224
+223
+222
+222
+221
+220
+220
+220
+220
+220
+221
+222
+223
+224
+225
+226
+226
+226
+225
+224
+223
+221
+221
+221
+221
+221
+220
+218
+215
+212
+210
+208
+208
+208
+208
+206
+194
+172
+152
+138
+133
+148
+174
+192
+203
+208
+213
+214
+213
+210
+203
+194
+192
+192
+192
+192
+189
+181
+171
+158
+141
+86
+40
+13
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+87
+104
+126
+144
+150
+158
+159
+159
+157
+156
+156
+157
+159
+160
+160
+159
+159
+157
+155
+155
+161
+174
+181
+181
+175
+111
+46
+14
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+3
+10
+24
+45
+71
+100
+126
+135
+137
+129
+107
+31
+10
+2
+2
+3
+20
+54
+87
+116
+136
+143
+145
+144
+141
+137
+122
+104
+75
+44
+14
+5
+5
+4
+5
+6
+17
+34
+65
+112
+175
+210
+214
+216
+215
+214
+212
+207
+205
+202
+200
+197
+197
+196
+195
+195
+194
+194
+193
+191
+187
+178
+166
+151
+135
+117
+106
+106
+112
+124
+141
+167
+187
+200
+209
+211
+212
+212
+213
+214
+215
+215
+216
+216
+216
+216
+216
+216
+216
+216
+216
+215
+214
+213
+212
+211
+211
+212
+213
+216
+219
+222
+222
+222
+221
+219
+216
+216
+216
+217
+220
+224
+225
+225
+225
+225
+224
+223
+223
+222
+222
+221
+221
+221
+222
+222
+224
+225
+225
+226
+226
+226
+225
+224
+222
+221
+220
+220
+220
+220
+219
+217
+214
+211
+209
+208
+208
+208
+207
+204
+198
+174
+152
+142
+140
+144
+174
+193
+203
+209
+212
+214
+213
+210
+204
+196
+192
+192
+192
+191
+190
+182
+171
+159
+140
+109
+41
+14
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+87
+110
+131
+147
+151
+158
+160
+159
+157
+156
+156
+158
+159
+160
+160
+160
+159
+158
+156
+155
+158
+171
+179
+181
+177
+115
+48
+14
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+5
+14
+30
+54
+94
+107
+111
+105
+92
+29
+10
+2
+1
+1
+3
+13
+37
+71
+108
+126
+133
+134
+132
+129
+116
+98
+73
+43
+13
+4
+4
+4
+4
+4
+7
+21
+45
+81
+134
+201
+211
+215
+216
+215
+214
+211
+207
+204
+203
+199
+198
+198
+197
+196
+195
+194
+193
+191
+187
+178
+166
+151
+134
+117
+107
+108
+114
+126
+143
+169
+187
+201
+209
+211
+212
+213
+213
+214
+215
+215
+216
+216
+216
+216
+216
+216
+216
+216
+216
+215
+214
+213
+212
+211
+211
+212
+213
+216
+219
+221
+221
+221
+220
+218
+215
+215
+215
+216
+220
+224
+225
+225
+225
+225
+225
+225
+224
+224
+224
+224
+224
+224
+225
+225
+225
+226
+226
+226
+226
+225
+223
+222
+221
+220
+220
+220
+219
+217
+216
+212
+210
+208
+208
+208
+208
+207
+205
+196
+178
+149
+144
+142
+148
+168
+197
+205
+209
+212
+214
+214
+210
+203
+196
+192
+192
+192
+191
+189
+184
+171
+162
+144
+111
+58
+9
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+89
+118
+138
+149
+152
+159
+161
+159
+157
+157
+157
+158
+159
+160
+160
+160
+160
+159
+157
+155
+157
+169
+178
+181
+177
+117
+48
+14
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+2
+4
+7
+24
+36
+39
+37
+30
+10
+4
+2
+1
+1
+1
+2
+6
+16
+39
+80
+97
+106
+108
+106
+95
+80
+55
+29
+7
+2
+2
+3
+3
+3
+4
+7
+21
+47
+88
+169
+200
+213
+216
+216
+215
+214
+210
+207
+205
+203
+201
+199
+198
+197
+195
+194
+193
+191
+188
+178
+166
+151
+134
+117
+108
+109
+116
+127
+143
+168
+186
+200
+209
+211
+212
+213
+213
+214
+214
+215
+215
+215
+216
+216
+216
+216
+216
+216
+216
+215
+214
+213
+211
+211
+211
+211
+213
+215
+218
+220
+220
+219
+218
+216
+214
+213
+213
+215
+219
+224
+225
+225
+225
+225
+225
+225
+225
+225
+225
+225
+225
+225
+225
+225
+225
+226
+225
+225
+224
+222
+220
+220
+219
+218
+217
+215
+214
+212
+210
+208
+208
+208
+208
+207
+205
+198
+183
+166
+152
+147
+148
+161
+180
+199
+209
+211
+213
+213
+213
+208
+200
+195
+192
+192
+192
+191
+186
+180
+172
+160
+136
+94
+48
+11
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+91
+124
+143
+151
+153
+160
+161
+159
+157
+157
+157
+158
+159
+160
+160
+160
+160
+159
+157
+155
+157
+169
+178
+181
+177
+114
+46
+13
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+3
+8
+12
+13
+12
+10
+4
+2
+1
+1
+1
+1
+1
+3
+6
+14
+37
+59
+74
+81
+82
+74
+61
+41
+20
+5
+2
+2
+2
+3
+3
+3
+5
+13
+30
+61
+133
+182
+206
+214
+216
+216
+215
+213
+210
+206
+204
+202
+201
+200
+199
+196
+195
+193
+191
+188
+179
+167
+152
+135
+118
+109
+110
+117
+128
+143
+166
+184
+198
+208
+211
+212
+213
+213
+214
+214
+215
+215
+215
+215
+216
+216
+216
+216
+216
+216
+215
+214
+213
+212
+211
+211
+211
+212
+214
+217
+218
+218
+218
+217
+215
+212
+212
+212
+213
+216
+223
+224
+225
+225
+225
+225
+225
+225
+225
+225
+225
+225
+225
+225
+225
+224
+224
+222
+221
+220
+218
+217
+216
+215
+214
+213
+212
+210
+210
+209
+208
+208
+207
+205
+203
+190
+176
+165
+157
+152
+155
+168
+184
+199
+208
+211
+212
+213
+212
+208
+199
+195
+193
+192
+192
+189
+185
+179
+172
+163
+133
+90
+50
+19
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+94
+129
+147
+153
+154
+160
+161
+160
+158
+157
+157
+158
+159
+159
+160
+160
+160
+159
+157
+156
+157
+169
+178
+181
+176
+108
+43
+12
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+2
+3
+2
+2
+1
+1
+1
+1
+1
+1
+1
+1
+2
+4
+13
+28
+41
+51
+56
+51
+41
+27
+13
+4
+1
+1
+1
+2
+3
+3
+4
+7
+18
+39
+101
+158
+194
+212
+215
+216
+216
+215
+212
+209
+206
+204
+203
+201
+200
+197
+195
+194
+192
+188
+180
+168
+153
+136
+119
+110
+111
+117
+127
+141
+163
+181
+196
+206
+211
+212
+213
+213
+214
+214
+215
+215
+215
+215
+215
+216
+216
+216
+216
+216
+215
+214
+213
+212
+211
+211
+211
+212
+213
+215
+217
+217
+217
+216
+215
+212
+211
+211
+211
+213
+220
+223
+224
+225
+225
+225
+225
+225
+224
+224
+224
+224
+223
+223
+222
+221
+220
+218
+217
+216
+215
+214
+213
+212
+212
+210
+210
+209
+208
+208
+207
+205
+201
+195
+187
+174
+165
+159
+157
+159
+174
+189
+201
+208
+211
+212
+212
+210
+206
+201
+195
+193
+192
+191
+189
+184
+179
+171
+159
+139
+89
+48
+21
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+98
+133
+150
+155
+156
+161
+161
+160
+158
+157
+157
+158
+158
+159
+160
+160
+160
+159
+157
+156
+157
+170
+179
+181
+174
+100
+38
+10
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+3
+7
+16
+24
+30
+28
+23
+15
+8
+3
+1
+1
+1
+1
+2
+2
+3
+4
+9
+22
+72
+128
+175
+206
+214
+215
+216
+216
+215
+212
+208
+207
+205
+203
+201
+198
+196
+194
+192
+189
+181
+170
+155
+138
+120
+111
+112
+117
+127
+139
+160
+177
+192
+204
+210
+212
+213
+213
+214
+214
+214
+214
+215
+215
+215
+215
+216
+216
+216
+216
+215
+214
+213
+212
+211
+211
+211
+211
+212
+214
+216
+216
+216
+215
+214
+211
+210
+209
+209
+210
+216
+221
+223
+224
+225
+225
+224
+224
+223
+223
+222
+222
+221
+220
+219
+217
+216
+215
+214
+213
+212
+211
+211
+210
+210
+209
+208
+208
+207
+206
+202
+197
+190
+181
+171
+163
+161
+162
+166
+175
+195
+205
+210
+212
+212
+212
+209
+205
+200
+195
+193
+192
+191
+188
+185
+178
+171
+157
+134
+99
+42
+17
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+102
+136
+151
+156
+157
+161
+161
+160
+158
+157
+157
+157
+158
+159
+159
+159
+159
+159
+157
+156
+158
+172
+180
+180
+171
+87
+32
+8
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+3
+5
+8
+9
+7
+5
+3
+2
+1
+1
+1
+1
+1
+2
+2
+3
+4
+7
+44
+98
+154
+197
+212
+215
+216
+216
+216
+216
+211
+209
+207
+205
+202
+200
+196
+194
+192
+190
+182
+171
+157
+140
+122
+113
+113
+117
+125
+137
+156
+172
+188
+200
+208
+211
+213
+213
+214
+214
+214
+214
+214
+215
+215
+215
+215
+215
+215
+215
+215
+215
+214
+213
+212
+211
+211
+211
+212
+213
+214
+215
+215
+214
+214
+211
+209
+208
+208
+208
+210
+216
+220
+223
+224
+224
+224
+223
+222
+222
+220
+219
+218
+217
+216
+214
+213
+212
+212
+211
+211
+210
+210
+209
+209
+208
+207
+206
+204
+200
+190
+181
+174
+168
+164
+163
+164
+172
+184
+200
+210
+211
+212
+212
+212
+209
+203
+198
+195
+193
+192
+190
+187
+183
+179
+172
+159
+130
+91
+45
+9
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+108
+137
+152
+157
+158
+162
+162
+161
+159
+157
+157
+157
+158
+158
+159
+159
+159
+158
+157
+156
+160
+175
+181
+177
+162
+65
+22
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+2
+3
+5
+19
+58
+113
+168
+206
+214
+215
+216
+217
+217
+215
+212
+210
+208
+205
+201
+198
+195
+193
+191
+184
+174
+160
+144
+126
+114
+114
+117
+124
+133
+149
+164
+180
+193
+203
+209
+211
+213
+213
+214
+214
+214
+214
+214
+214
+215
+215
+215
+215
+215
+215
+215
+214
+214
+213
+212
+211
+211
+211
+212
+213
+213
+213
+213
+213
+211
+209
+208
+206
+206
+205
+207
+211
+215
+218
+221
+222
+221
+221
+220
+219
+218
+217
+215
+214
+213
+212
+211
+211
+210
+210
+209
+208
+207
+206
+202
+197
+192
+185
+179
+173
+170
+169
+168
+167
+176
+189
+200
+207
+211
+212
+212
+211
+209
+206
+199
+196
+194
+193
+192
+188
+184
+180
+176
+170
+145
+105
+63
+28
+7
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+111
+138
+152
+158
+159
+162
+162
+161
+159
+158
+157
+158
+158
+158
+159
+159
+159
+158
+157
+157
+164
+178
+182
+173
+146
+47
+15
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+2
+3
+12
+38
+83
+138
+194
+212
+214
+215
+216
+217
+216
+214
+212
+210
+206
+202
+198
+196
+193
+192
+185
+176
+163
+148
+130
+116
+115
+117
+123
+131
+144
+157
+172
+186
+197
+205
+209
+212
+213
+213
+214
+214
+214
+214
+214
+214
+215
+215
+215
+215
+215
+215
+215
+214
+213
+212
+212
+211
+211
+212
+212
+212
+212
+212
+212
+211
+209
+208
+206
+205
+204
+204
+205
+207
+209
+212
+214
+216
+216
+217
+216
+215
+215
+214
+213
+211
+210
+209
+208
+207
+205
+203
+200
+197
+194
+188
+184
+181
+178
+175
+172
+172
+174
+179
+185
+196
+203
+208
+210
+211
+211
+209
+207
+204
+200
+196
+194
+192
+189
+187
+183
+180
+173
+161
+140
+92
+54
+27
+10
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+115
+139
+152
+159
+160
+163
+163
+161
+160
+158
+158
+158
+158
+158
+158
+159
+158
+158
+157
+157
+169
+180
+181
+165
+124
+31
+10
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+6
+23
+57
+107
+171
+208
+212
+214
+215
+217
+217
+216
+214
+211
+208
+203
+199
+196
+194
+192
+186
+178
+166
+152
+134
+118
+116
+118
+122
+128
+139
+151
+164
+178
+190
+200
+206
+209
+212
+213
+213
+214
+214
+214
+214
+214
+214
+214
+215
+215
+215
+215
+215
+214
+214
+213
+212
+212
+212
+212
+212
+212
+212
+212
+212
+211
+209
+208
+207
+205
+203
+203
+202
+203
+203
+205
+206
+207
+208
+209
+209
+208
+208
+207
+206
+205
+204
+202
+200
+199
+196
+193
+191
+188
+185
+181
+179
+177
+176
+176
+178
+181
+187
+193
+200
+207
+210
+211
+211
+210
+208
+205
+202
+199
+196
+193
+190
+188
+185
+182
+178
+169
+152
+127
+93
+45
+22
+8
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+118
+139
+152
+159
+161
+163
+163
+162
+160
+158
+158
+158
+158
+158
+158
+159
+158
+158
+157
+159
+175
+181
+178
+154
+96
+17
+6
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+12
+36
+77
+139
+200
+209
+213
+214
+216
+217
+216
+215
+213
+209
+204
+200
+197
+195
+193
+188
+180
+170
+156
+139
+121
+118
+118
+121
+126
+135
+144
+156
+168
+181
+194
+200
+205
+209
+212
+213
+213
+213
+213
+214
+214
+214
+214
+214
+214
+215
+215
+215
+215
+214
+214
+213
+213
+212
+212
+212
+212
+212
+212
+211
+211
+210
+209
+207
+206
+204
+203
+202
+201
+200
+200
+200
+200
+200
+200
+200
+200
+200
+199
+198
+197
+195
+194
+192
+190
+187
+185
+183
+182
+181
+179
+179
+179
+181
+183
+189
+195
+201
+206
+210
+212
+211
+210
+209
+207
+204
+200
+197
+195
+193
+189
+186
+184
+180
+177
+165
+145
+116
+81
+45
+13
+5
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+120
+140
+152
+159
+161
+164
+164
+163
+161
+158
+158
+158
+158
+158
+158
+159
+158
+157
+158
+161
+181
+182
+173
+138
+64
+8
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+5
+19
+49
+102
+187
+204
+212
+214
+214
+216
+216
+215
+213
+211
+205
+201
+198
+196
+194
+189
+182
+173
+161
+145
+124
+120
+119
+121
+125
+132
+138
+147
+158
+171
+185
+193
+200
+205
+209
+212
+213
+213
+213
+213
+213
+213
+214
+214
+214
+214
+214
+214
+214
+214
+214
+214
+213
+213
+212
+212
+212
+212
+211
+211
+211
+210
+209
+208
+207
+204
+203
+202
+201
+200
+198
+198
+197
+196
+195
+194
+194
+193
+192
+191
+190
+189
+188
+187
+186
+184
+184
+183
+182
+181
+182
+184
+187
+192
+198
+205
+209
+211
+211
+212
+211
+209
+207
+205
+202
+199
+196
+193
+190
+187
+184
+182
+180
+175
+167
+138
+101
+63
+31
+10
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+123
+140
+152
+159
+162
+164
+164
+164
+162
+160
+158
+158
+158
+158
+159
+159
+158
+158
+161
+170
+183
+181
+152
+100
+29
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+9
+25
+59
+145
+188
+207
+213
+214
+215
+215
+215
+214
+211
+207
+203
+200
+197
+195
+191
+186
+178
+167
+154
+132
+124
+121
+121
+124
+129
+133
+138
+146
+156
+170
+180
+188
+195
+201
+207
+210
+211
+212
+213
+213
+213
+213
+213
+213
+213
+214
+214
+214
+214
+214
+214
+214
+213
+213
+213
+212
+212
+212
+211
+211
+210
+210
+209
+208
+207
+205
+204
+202
+200
+199
+198
+197
+196
+195
+194
+193
+192
+192
+191
+190
+189
+188
+187
+187
+186
+187
+188
+191
+194
+199
+203
+207
+209
+210
+211
+211
+211
+210
+208
+206
+204
+202
+199
+197
+193
+190
+186
+184
+182
+179
+174
+164
+145
+114
+65
+34
+14
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+124
+139
+151
+159
+162
+165
+165
+164
+163
+161
+159
+159
+159
+159
+159
+159
+158
+159
+164
+177
+181
+171
+124
+64
+12
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+5
+15
+36
+103
+165
+198
+211
+213
+214
+215
+215
+214
+212
+208
+205
+201
+199
+196
+192
+188
+181
+173
+162
+141
+129
+124
+122
+124
+128
+131
+134
+139
+146
+158
+167
+176
+184
+192
+200
+204
+207
+210
+211
+212
+212
+212
+212
+213
+213
+213
+213
+213
+214
+214
+214
+214
+213
+213
+213
+213
+213
+212
+212
+212
+211
+211
+210
+210
+209
+208
+206
+205
+204
+202
+201
+200
+198
+197
+196
+195
+195
+194
+194
+193
+194
+194
+195
+195
+197
+199
+201
+203
+205
+207
+209
+209
+210
+210
+210
+209
+208
+206
+205
+202
+200
+197
+194
+190
+186
+184
+182
+180
+177
+168
+150
+124
+93
+60
+26
+13
+5
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+125
+139
+150
+158
+162
+165
+165
+165
+164
+162
+160
+159
+159
+160
+160
+158
+158
+162
+170
+180
+179
+148
+91
+35
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+7
+18
+68
+134
+180
+207
+213
+214
+214
+214
+214
+213
+209
+206
+203
+200
+197
+194
+190
+185
+178
+169
+150
+137
+128
+124
+124
+127
+129
+132
+135
+139
+148
+156
+164
+172
+180
+190
+196
+201
+205
+208
+210
+211
+212
+212
+212
+212
+212
+212
+212
+213
+213
+213
+213
+213
+213
+213
+213
+213
+213
+213
+212
+212
+212
+212
+211
+210
+210
+209
+208
+207
+206
+205
+204
+203
+203
+202
+201
+201
+201
+201
+201
+202
+202
+203
+204
+206
+207
+208
+209
+210
+210
+210
+209
+209
+209
+207
+206
+204
+203
+200
+197
+194
+191
+187
+184
+181
+179
+176
+170
+161
+135
+107
+77
+48
+25
+7
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+126
+139
+149
+157
+162
+165
+165
+165
+164
+163
+161
+161
+161
+161
+160
+158
+160
+167
+175
+181
+170
+115
+57
+14
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+7
+39
+98
+155
+197
+211
+213
+214
+214
+214
+213
+210
+207
+204
+201
+199
+195
+192
+188
+182
+175
+160
+146
+135
+128
+126
+126
+129
+131
+133
+135
+140
+146
+152
+160
+167
+178
+185
+191
+197
+201
+206
+208
+210
+211
+211
+211
+211
+212
+212
+212
+212
+212
+213
+213
+213
+213
+213
+213
+213
+213
+213
+213
+212
+212
+212
+212
+211
+211
+211
+211
+210
+209
+209
+209
+208
+208
+208
+208
+208
+208
+208
+209
+209
+209
+210
+210
+210
+210
+210
+210
+209
+209
+208
+207
+206
+204
+202
+200
+198
+195
+190
+187
+184
+181
+179
+176
+172
+163
+149
+128
+89
+59
+34
+16
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+127
+138
+148
+156
+161
+164
+165
+165
+165
+164
+163
+163
+162
+161
+159
+159
+163
+172
+179
+178
+149
+72
+25
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+3
+14
+61
+122
+177
+208
+213
+213
+214
+214
+214
+211
+209
+206
+203
+200
+196
+194
+190
+185
+180
+168
+156
+144
+134
+128
+128
+129
+130
+132
+133
+135
+138
+143
+148
+154
+164
+171
+179
+185
+192
+199
+203
+206
+208
+210
+210
+211
+211
+211
+211
+211
+211
+211
+212
+212
+212
+212
+212
+213
+213
+213
+213
+212
+212
+212
+212
+212
+212
+212
+212
+212
+212
+212
+211
+211
+211
+211
+211
+211
+211
+211
+211
+210
+210
+210
+210
+210
+209
+209
+208
+207
+206
+206
+204
+203
+201
+198
+194
+191
+187
+182
+180
+178
+177
+175
+169
+157
+136
+109
+76
+39
+18
+7
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+127
+138
+147
+155
+160
+163
+164
+165
+165
+164
+164
+163
+161
+159
+159
+161
+170
+174
+172
+160
+76
+28
+6
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+7
+24
+70
+130
+191
+211
+213
+213
+214
+214
+212
+210
+208
+205
+202
+199
+196
+193
+189
+185
+178
+169
+158
+148
+138
+132
+131
+131
+132
+133
+135
+135
+137
+139
+142
+148
+154
+160
+167
+173
+182
+188
+193
+198
+202
+206
+208
+209
+209
+210
+210
+210
+210
+210
+210
+210
+211
+211
+211
+211
+211
+212
+212
+212
+212
+212
+212
+212
+212
+212
+212
+211
+211
+211
+211
+211
+211
+211
+210
+210
+210
+209
+209
+209
+208
+207
+207
+207
+206
+206
+204
+203
+200
+197
+194
+189
+185
+182
+179
+177
+176
+174
+171
+166
+156
+128
+100
+70
+42
+23
+5
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+128
+138
+147
+153
+158
+163
+164
+164
+165
+164
+164
+162
+161
+160
+161
+167
+173
+171
+154
+111
+39
+15
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+13
+43
+89
+153
+204
+211
+213
+213
+213
+213
+211
+209
+207
+204
+201
+198
+195
+192
+188
+183
+176
+168
+159
+150
+140
+137
+135
+134
+134
+135
+136
+137
+138
+140
+143
+146
+150
+154
+160
+167
+173
+179
+184
+190
+196
+200
+203
+205
+207
+208
+209
+209
+209
+209
+209
+209
+209
+209
+210
+210
+210
+210
+210
+210
+210
+210
+210
+210
+210
+210
+210
+210
+210
+210
+209
+209
+209
+209
+209
+208
+208
+208
+207
+207
+206
+205
+204
+202
+200
+197
+194
+190
+187
+183
+179
+177
+175
+174
+172
+169
+162
+150
+133
+111
+77
+51
+31
+18
+8
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+128
+139
+147
+152
+157
+161
+163
+164
+164
+164
+162
+161
+160
+161
+162
+170
+171
+156
+123
+73
+23
+10
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+6
+23
+56
+111
+185
+204
+212
+213
+213
+213
+212
+210
+208
+206
+203
+200
+197
+194
+191
+186
+182
+177
+170
+162
+152
+146
+143
+140
+138
+137
+138
+138
+139
+139
+141
+143
+145
+148
+151
+156
+161
+165
+170
+176
+183
+188
+192
+196
+199
+202
+204
+206
+207
+207
+208
+208
+208
+208
+208
+208
+208
+209
+209
+209
+209
+209
+209
+209
+209
+209
+209
+209
+208
+208
+208
+208
+207
+207
+207
+206
+206
+205
+204
+203
+200
+198
+196
+193
+190
+186
+183
+180
+177
+175
+173
+171
+169
+166
+161
+147
+131
+111
+89
+65
+36
+20
+11
+5
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+129
+140
+147
+152
+155
+160
+162
+163
+164
+163
+161
+160
+161
+162
+164
+171
+162
+132
+91
+49
+19
+9
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+10
+31
+69
+153
+190
+207
+212
+213
+213
+213
+211
+210
+208
+205
+202
+199
+197
+194
+190
+187
+183
+178
+173
+164
+158
+153
+149
+145
+142
+141
+141
+140
+141
+141
+142
+143
+145
+146
+149
+152
+155
+159
+163
+169
+174
+178
+183
+187
+193
+196
+199
+201
+203
+204
+205
+206
+206
+207
+207
+207
+207
+207
+207
+207
+207
+207
+207
+207
+207
+207
+207
+206
+206
+206
+205
+205
+204
+203
+202
+200
+199
+197
+195
+191
+188
+185
+182
+179
+176
+173
+172
+170
+169
+166
+163
+157
+148
+136
+111
+88
+66
+45
+28
+9
+5
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+130
+141
+147
+151
+154
+159
+162
+163
+162
+160
+160
+161
+161
+163
+167
+169
+144
+107
+70
+44
+23
+11
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+12
+32
+108
+166
+198
+211
+213
+213
+213
+212
+211
+209
+207
+204
+201
+199
+196
+192
+190
+187
+185
+182
+175
+170
+166
+162
+158
+153
+150
+147
+145
+143
+142
+142
+143
+144
+145
+146
+149
+150
+152
+154
+158
+161
+165
+169
+172
+178
+182
+186
+190
+193
+197
+199
+201
+203
+204
+204
+205
+205
+205
+205
+205
+205
+205
+204
+204
+204
+204
+203
+203
+202
+201
+200
+199
+197
+196
+193
+190
+188
+185
+182
+178
+175
+173
+171
+169
+168
+167
+166
+165
+163
+157
+147
+132
+114
+91
+61
+41
+26
+15
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+131
+142
+148
+151
+153
+159
+160
+159
+159
+160
+161
+159
+159
+162
+170
+155
+117
+90
+70
+52
+25
+12
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+10
+48
+109
+163
+200
+211
+212
+213
+213
+212
+211
+209
+207
+204
+202
+199
+196
+193
+191
+190
+188
+185
+182
+179
+177
+175
+172
+169
+166
+163
+159
+154
+151
+148
+146
+146
+146
+148
+149
+150
+152
+154
+155
+157
+158
+160
+162
+165
+167
+169
+172
+175
+178
+181
+184
+186
+189
+191
+192
+194
+194
+195
+195
+195
+195
+194
+194
+192
+191
+190
+188
+186
+184
+182
+180
+178
+175
+173
+171
+169
+167
+166
+165
+164
+164
+163
+161
+158
+153
+144
+131
+107
+87
+68
+49
+31
+13
+9
+5
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+131
+143
+149
+151
+153
+158
+158
+159
+160
+161
+159
+157
+161
+167
+168
+131
+108
+95
+83
+65
+32
+16
+6
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+24
+68
+121
+170
+203
+211
+212
+212
+212
+212
+210
+209
+206
+204
+202
+198
+196
+194
+192
+191
+190
+188
+186
+184
+183
+181
+180
+178
+176
+174
+171
+168
+164
+161
+157
+152
+151
+150
+150
+151
+153
+154
+155
+156
+158
+160
+161
+162
+164
+165
+167
+168
+169
+170
+172
+173
+174
+175
+177
+177
+178
+179
+179
+180
+180
+179
+179
+178
+177
+176
+174
+173
+171
+170
+168
+166
+165
+164
+163
+163
+162
+161
+159
+156
+152
+141
+129
+115
+100
+83
+60
+45
+32
+20
+10
+5
+3
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+133
+144
+149
+151
+153
+157
+158
+159
+160
+160
+156
+156
+164
+168
+158
+120
+113
+110
+105
+92
+52
+27
+11
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+9
+35
+79
+130
+180
+207
+210
+212
+212
+212
+211
+210
+208
+206
+204
+201
+199
+196
+194
+193
+192
+191
+191
+190
+188
+188
+187
+186
+186
+185
+183
+181
+178
+176
+172
+167
+163
+160
+157
+155
+155
+155
+155
+156
+157
+158
+159
+160
+161
+162
+163
+163
+164
+164
+165
+165
+166
+166
+166
+167
+167
+167
+168
+168
+167
+167
+167
+166
+166
+165
+164
+163
+163
+162
+161
+160
+159
+159
+158
+157
+153
+148
+142
+134
+123
+105
+90
+73
+57
+43
+27
+19
+12
+6
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+134
+145
+149
+151
+153
+157
+159
+161
+161
+157
+154
+160
+168
+166
+144
+121
+127
+130
+130
+123
+84
+49
+23
+7
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+12
+41
+85
+143
+194
+206
+211
+212
+212
+212
+211
+210
+208
+207
+204
+202
+199
+197
+195
+194
+193
+193
+193
+192
+192
+192
+192
+191
+191
+191
+190
+189
+188
+186
+183
+179
+175
+171
+166
+162
+161
+159
+159
+158
+159
+159
+160
+161
+161
+162
+162
+163
+163
+163
+163
+163
+162
+162
+162
+162
+161
+161
+161
+160
+160
+159
+159
+159
+158
+158
+158
+157
+157
+157
+156
+155
+154
+151
+148
+138
+128
+116
+102
+86
+65
+49
+35
+24
+15
+7
+5
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+136
+146
+150
+151
+153
+157
+163
+163
+159
+153
+154
+169
+172
+160
+131
+135
+145
+150
+150
+148
+127
+82
+43
+15
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+13
+42
+92
+166
+195
+208
+211
+212
+212
+212
+211
+210
+209
+207
+204
+202
+200
+197
+195
+195
+194
+194
+194
+195
+195
+195
+195
+195
+195
+195
+194
+194
+193
+193
+192
+191
+189
+186
+181
+177
+172
+168
+165
+162
+161
+161
+161
+162
+162
+163
+163
+163
+163
+163
+163
+163
+162
+162
+162
+161
+161
+160
+160
+159
+159
+158
+158
+158
+157
+156
+156
+155
+154
+153
+151
+147
+141
+133
+114
+99
+83
+66
+49
+29
+18
+11
+6
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+137
+146
+150
+151
+154
+162
+164
+161
+156
+155
+168
+177
+163
+144
+135
+153
+155
+155
+153
+151
+146
+127
+86
+41
+10
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+10
+30
+96
+151
+187
+207
+211
+211
+212
+212
+211
+210
+209
+208
+206
+204
+202
+199
+197
+196
+195
+195
+195
+196
+196
+196
+196
+196
+196
+197
+197
+197
+197
+197
+197
+197
+196
+195
+193
+192
+190
+187
+184
+181
+179
+176
+174
+172
+171
+171
+170
+170
+170
+169
+169
+169
+168
+167
+167
+166
+166
+165
+164
+163
+163
+162
+161
+160
+159
+157
+156
+154
+150
+144
+134
+120
+102
+77
+60
+44
+30
+18
+8
+4
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+138
+146
+150
+153
+158
+167
+164
+160
+158
+162
+179
+179
+159
+140
+144
+157
+157
+156
+153
+150
+147
+139
+110
+69
+22
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+4
+12
+49
+97
+145
+185
+206
+211
+211
+212
+212
+212
+210
+209
+208
+207
+205
+203
+201
+199
+198
+197
+196
+196
+196
+196
+196
+196
+197
+197
+197
+198
+198
+198
+198
+198
+198
+198
+197
+197
+196
+196
+194
+193
+191
+190
+189
+187
+185
+184
+183
+183
+182
+181
+181
+180
+180
+179
+178
+178
+177
+177
+175
+174
+172
+170
+169
+165
+162
+159
+156
+152
+144
+132
+115
+96
+76
+52
+37
+24
+14
+7
+3
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+139
+147
+150
+154
+162
+169
+163
+161
+164
+174
+184
+174
+154
+140
+151
+160
+160
+157
+153
+149
+146
+143
+125
+91
+38
+5
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+20
+53
+97
+143
+183
+207
+210
+211
+212
+212
+211
+211
+210
+209
+208
+206
+205
+203
+201
+200
+199
+199
+198
+198
+197
+197
+197
+198
+198
+198
+199
+199
+199
+199
+199
+199
+199
+199
+199
+200
+199
+199
+198
+198
+198
+197
+196
+195
+194
+193
+192
+191
+191
+190
+189
+188
+187
+186
+185
+184
+181
+179
+177
+174
+171
+167
+162
+157
+150
+141
+123
+105
+86
+67
+50
+31
+20
+11
+5
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+141
+147
+151
+156
+166
+170
+163
+164
+171
+185
+186
+166
+149
+142
+156
+163
+162
+157
+152
+147
+145
+143
+134
+107
+54
+9
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+5
+21
+51
+92
+141
+189
+202
+209
+211
+211
+212
+211
+211
+210
+210
+209
+207
+206
+205
+204
+203
+202
+201
+200
+200
+199
+199
+199
+199
+200
+200
+200
+201
+201
+201
+200
+200
+201
+201
+201
+201
+201
+202
+202
+202
+202
+202
+202
+201
+201
+200
+199
+198
+197
+196
+194
+193
+191
+189
+186
+182
+179
+176
+172
+167
+159
+151
+142
+131
+116
+91
+72
+54
+39
+26
+15
+9
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+143
+148
+152
+158
+170
+169
+164
+168
+177
+188
+186
+157
+145
+147
+159
+164
+163
+157
+151
+145
+143
+142
+137
+117
+70
+13
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+5
+19
+44
+82
+147
+184
+203
+210
+210
+211
+212
+211
+211
+211
+210
+210
+209
+208
+207
+206
+205
+204
+203
+202
+202
+202
+202
+202
+202
+203
+203
+203
+203
+202
+202
+202
+202
+202
+201
+201
+202
+202
+203
+203
+204
+204
+204
+204
+204
+204
+203
+201
+200
+198
+195
+193
+190
+187
+184
+179
+175
+169
+162
+154
+137
+123
+107
+90
+73
+52
+37
+25
+15
+8
+5
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+144
+148
+155
+163
+173
+166
+165
+173
+184
+189
+181
+150
+141
+147
+160
+161
+155
+149
+144
+143
+143
+142
+138
+122
+83
+19
+6
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+10
+26
+68
+110
+150
+183
+204
+210
+211
+212
+212
+212
+212
+212
+211
+211
+211
+211
+211
+210
+210
+210
+209
+209
+208
+208
+208
+207
+207
+207
+206
+206
+205
+204
+203
+203
+202
+202
+202
+202
+203
+203
+203
+204
+204
+205
+205
+203
+201
+198
+195
+191
+185
+180
+172
+164
+154
+140
+128
+115
+102
+88
+71
+58
+44
+32
+23
+14
+10
+6
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+144
+149
+157
+166
+173
+164
+165
+176
+187
+190
+173
+147
+141
+146
+155
+151
+147
+144
+143
+142
+141
+140
+137
+123
+88
+21
+7
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+9
+32
+60
+93
+127
+159
+189
+200
+206
+209
+211
+211
+212
+212
+212
+212
+212
+211
+211
+211
+211
+211
+211
+210
+210
+210
+209
+209
+208
+208
+207
+206
+205
+205
+204
+203
+202
+202
+202
+202
+203
+203
+202
+202
+201
+198
+191
+185
+178
+170
+161
+148
+138
+127
+116
+105
+89
+78
+67
+56
+45
+35
+26
+19
+13
+8
+5
+3
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+146
+150
+159
+167
+170
+162
+167
+179
+189
+189
+164
+144
+139
+143
+146
+144
+142
+142
+141
+141
+139
+139
+136
+123
+90
+23
+8
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+11
+27
+48
+74
+104
+140
+161
+177
+189
+198
+204
+206
+208
+209
+209
+210
+210
+210
+210
+210
+210
+210
+210
+210
+209
+209
+209
+208
+208
+207
+206
+205
+204
+203
+202
+201
+201
+201
+201
+200
+199
+196
+192
+186
+178
+164
+154
+143
+131
+119
+103
+91
+80
+70
+60
+48
+39
+31
+24
+19
+13
+8
+6
+4
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+147
+151
+159
+166
+166
+160
+170
+181
+190
+188
+156
+141
+138
+139
+139
+140
+141
+141
+140
+139
+138
+137
+135
+122
+90
+23
+8
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+7
+18
+33
+52
+83
+106
+128
+147
+163
+176
+183
+188
+192
+195
+197
+199
+200
+201
+201
+202
+202
+202
+203
+203
+203
+203
+203
+203
+203
+202
+201
+201
+200
+199
+197
+196
+195
+193
+190
+184
+177
+168
+157
+144
+126
+112
+99
+86
+74
+59
+49
+40
+32
+25
+19
+14
+9
+6
+5
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+147
+152
+160
+165
+162
+159
+174
+184
+189
+184
+148
+139
+136
+136
+137
+141
+141
+140
+139
+137
+137
+136
+133
+120
+87
+22
+7
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+8
+17
+34
+50
+66
+81
+96
+115
+128
+139
+149
+157
+165
+169
+172
+175
+178
+180
+182
+184
+186
+188
+189
+190
+191
+192
+192
+192
+192
+191
+190
+189
+187
+184
+179
+174
+166
+153
+140
+126
+112
+98
+80
+67
+55
+43
+33
+24
+18
+12
+8
+5
+4
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+147
+152
+157
+159
+155
+159
+180
+187
+183
+172
+142
+137
+136
+138
+141
+141
+141
+140
+138
+137
+136
+136
+132
+115
+77
+17
+6
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+6
+11
+18
+24
+31
+37
+41
+45
+50
+54
+60
+64
+67
+71
+74
+78
+81
+85
+89
+93
+100
+104
+108
+112
+115
+119
+121
+122
+122
+121
+117
+112
+106
+99
+91
+79
+70
+60
+50
+41
+30
+23
+17
+11
+6
+4
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+145
+151
+154
+154
+152
+168
+183
+184
+176
+163
+141
+139
+139
+141
+142
+142
+141
+140
+140
+138
+137
+136
+130
+110
+67
+13
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+4
+6
+9
+11
+14
+15
+17
+18
+20
+22
+23
+25
+26
+28
+30
+31
+33
+35
+38
+41
+44
+47
+50
+53
+56
+58
+60
+61
+61
+59
+56
+53
+49
+45
+38
+33
+27
+22
+17
+11
+8
+6
+4
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+142
+148
+150
+150
+153
+177
+183
+178
+167
+154
+141
+141
+142
+143
+142
+142
+142
+142
+142
+141
+139
+137
+128
+103
+55
+9
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+3
+3
+4
+4
+4
+4
+5
+5
+6
+6
+7
+8
+8
+9
+10
+11
+12
+14
+15
+17
+18
+20
+21
+22
+23
+23
+23
+22
+20
+19
+17
+14
+11
+9
+7
+5
+3
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+138
+144
+147
+150
+158
+182
+179
+169
+157
+148
+143
+144
+143
+143
+143
+143
+145
+145
+145
+143
+141
+137
+123
+93
+43
+6
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+2
+2
+2
+3
+3
+3
+3
+4
+4
+4
+5
+5
+5
+5
+4
+4
+3
+2
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+138
+142
+145
+153
+171
+181
+171
+159
+150
+145
+145
+144
+143
+143
+143
+146
+148
+149
+148
+146
+143
+138
+117
+81
+31
+4
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+139
+143
+151
+162
+175
+168
+157
+150
+146
+145
+145
+143
+144
+146
+150
+156
+157
+155
+153
+149
+145
+136
+104
+62
+18
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+142
+148
+158
+167
+170
+157
+150
+147
+146
+145
+143
+144
+148
+153
+157
+159
+158
+156
+153
+150
+146
+130
+92
+47
+12
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+145
+153
+161
+165
+159
+149
+147
+146
+145
+144
+143
+149
+154
+158
+160
+160
+159
+157
+154
+152
+146
+120
+78
+35
+7
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+148
+157
+160
+158
+148
+145
+145
+145
+145
+144
+146
+155
+158
+159
+159
+159
+158
+157
+155
+153
+143
+108
+64
+24
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+148
+157
+154
+147
+143
+144
+145
+145
+145
+144
+155
+158
+157
+156
+155
+157
+157
+157
+156
+153
+139
+93
+49
+15
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+148
+148
+143
+138
+143
+144
+145
+144
+145
+148
+159
+153
+151
+150
+151
+153
+155
+156
+155
+151
+118
+68
+30
+7
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+143
+139
+137
+138
+143
+144
+145
+145
+147
+153
+155
+151
+149
+149
+150
+151
+152
+152
+149
+141
+92
+47
+18
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+138
+134
+135
+138
+143
+145
+145
+145
+148
+154
+152
+150
+149
+149
+149
+149
+149
+147
+138
+121
+65
+29
+10
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+134
+131
+134
+138
+143
+145
+145
+145
+148
+153
+151
+150
+149
+149
+148
+147
+145
+138
+123
+94
+40
+16
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+130
+130
+134
+139
+143
+145
+144
+145
+148
+151
+150
+150
+149
+149
+148
+146
+140
+126
+101
+64
+19
+7
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+128
+130
+134
+139
+144
+145
+144
+146
+149
+150
+151
+150
+150
+149
+148
+144
+129
+101
+67
+31
+6
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+128
+130
+134
+139
+144
+145
+144
+146
+149
+150
+151
+151
+150
+148
+147
+141
+115
+81
+46
+17
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+128
+130
+134
+139
+144
+145
+144
+146
+148
+150
+151
+150
+149
+148
+146
+135
+99
+61
+29
+8
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+128
+130
+134
+139
+145
+145
+144
+146
+148
+150
+151
+150
+148
+147
+145
+126
+82
+44
+16
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+128
+130
+134
+140
+145
+145
+145
+146
+148
+150
+150
+149
+148
+146
+143
+112
+64
+28
+7
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+128
+130
+134
+139
+145
+145
+145
+146
+147
+149
+149
+148
+146
+143
+137
+87
+39
+13
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+128
+129
+133
+139
+145
+145
+145
+146
+147
+149
+148
+146
+144
+140
+129
+62
+25
+7
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+128
+129
+133
+139
+145
+146
+146
+147
+148
+148
+147
+145
+143
+134
+112
+39
+14
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+128
+128
+132
+138
+145
+146
+147
+147
+148
+147
+145
+144
+140
+124
+88
+21
+7
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+127
+128
+131
+137
+145
+146
+147
+147
+147
+145
+143
+142
+135
+111
+58
+7
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+127
+127
+130
+136
+143
+146
+146
+145
+144
+142
+142
+139
+118
+78
+22
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+127
+127
+130
+134
+139
+144
+143
+142
+142
+142
+141
+130
+93
+46
+9
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+127
+127
+130
+133
+137
+140
+140
+141
+141
+141
+137
+108
+64
+22
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+128
+128
+129
+132
+135
+138
+139
+140
+140
+139
+123
+76
+35
+7
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+128
+128
+129
+132
+135
+136
+139
+140
+139
+136
+94
+39
+11
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+129
+130
+131
+132
+134
+138
+139
+138
+129
+107
+29
+9
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+130
+131
+132
+133
+136
+139
+138
+127
+101
+52
+10
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+132
+133
+134
+136
+138
+137
+126
+97
+59
+18
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+135
+135
+136
+137
+137
+125
+97
+57
+20
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+137
+137
+137
+137
+134
+94
+44
+16
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+136
+134
+125
+104
+66
+18
+6
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+105
+88
+67
+45
+22
+6
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+55
+41
+26
+13
+4
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+13
+7
+4
+2
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
diff --git a/privatemodules/nc4/share/hdf5_examples/hl/c/pal_rgb.h b/privatemodules/nc4/share/hdf5_examples/hl/c/pal_rgb.h
new file mode 100644
index 0000000000000000000000000000000000000000..606137e67d947a0e28d4ce0a5e4736350d6c8f32
--- /dev/null
+++ b/privatemodules/nc4/share/hdf5_examples/hl/c/pal_rgb.h
@@ -0,0 +1,279 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+const unsigned char pal_rgb[256*3] = {255,255,255,
+0,0,131,
+0,0,135,
+0,0,139,
+0,0,143,
+0,0,147,
+0,0,151,
+0,0,155,
+0,0,159,
+0,0,163,
+0,0,167,
+0,0,171,
+0,0,175,
+0,0,179,
+0,0,183,
+0,0,187,
+0,0,191,
+0,0,195,
+0,0,199,
+0,0,203,
+0,0,207,
+0,0,211,
+0,0,215,
+0,0,219,
+0,0,223,
+0,0,227,
+0,0,231,
+0,0,235,
+0,0,239,
+0,0,243,
+0,0,247,
+0,0,251,
+0,0,255,
+0,0,255,
+0,3,255,
+0,7,255,
+0,11,255,
+0,15,255,
+0,19,255,
+0,23,255,
+0,27,255,
+0,31,255,
+0,35,255,
+0,39,255,
+0,43,255,
+0,47,255,
+0,51,255,
+0,55,255,
+0,59,255,
+0,63,255,
+0,67,255,
+0,71,255,
+0,75,255,
+0,79,255,
+0,83,255,
+0,87,255,
+0,91,255,
+0,95,255,
+0,99,255,
+0,103,255,
+0,107,255,
+0,111,255,
+0,115,255,
+0,119,255,
+0,123,255,
+0,127,255,
+0,131,255,
+0,135,255,
+0,139,255,
+0,143,255,
+0,147,255,
+0,151,255,
+0,155,255,
+0,159,255,
+0,163,255,
+0,167,255,
+0,171,255,
+0,175,255,
+0,179,255,
+0,183,255,
+0,187,255,
+0,191,255,
+0,195,255,
+0,199,255,
+0,203,255,
+0,207,255,
+0,211,255,
+0,215,255,
+0,219,255,
+0,223,255,
+0,227,255,
+0,231,255,
+0,235,255,
+0,239,255,
+0,243,255,
+0,247,255,
+0,251,255,
+0,255,255,
+0,255,255,
+3,255,251,
+7,255,247,
+11,255,243,
+15,255,239,
+19,255,235,
+23,255,231,
+27,255,227,
+31,255,223,
+35,255,219,
+39,255,215,
+43,255,211,
+47,255,207,
+51,255,203,
+55,255,199,
+59,255,195,
+63,255,191,
+67,255,187,
+71,255,183,
+75,255,179,
+79,255,175,
+83,255,171,
+87,255,167,
+91,255,163,
+95,255,159,
+99,255,155,
+103,255,151,
+107,255,147,
+111,255,143,
+115,255,139,
+119,255,135,
+123,255,131,
+127,255,127,
+131,255,123,
+135,255,119,
+139,255,115,
+143,255,111,
+147,255,107,
+151,255,103,
+155,255,99,
+159,255,95,
+163,255,91,
+167,255,87,
+171,255,83,
+175,255,79,
+179,255,75,
+183,255,71,
+187,255,67,
+191,255,63,
+195,255,59,
+199,255,55,
+203,255,51,
+207,255,47,
+211,255,43,
+215,255,39,
+219,255,35,
+223,255,31,
+227,255,27,
+231,255,23,
+235,255,19,
+239,255,15,
+243,255,11,
+247,255,7,
+251,255,3,
+255,255,0,
+255,251,0,
+255,247,0,
+255,243,0,
+255,239,0,
+255,235,0,
+255,231,0,
+255,227,0,
+255,223,0,
+255,219,0,
+255,215,0,
+255,211,0,
+255,207,0,
+255,203,0,
+255,199,0,
+255,195,0,
+255,191,0,
+255,187,0,
+255,183,0,
+255,179,0,
+255,175,0,
+255,171,0,
+255,167,0,
+255,163,0,
+255,159,0,
+255,155,0,
+255,151,0,
+255,147,0,
+255,143,0,
+255,139,0,
+255,135,0,
+255,131,0,
+255,127,0,
+255,123,0,
+255,119,0,
+255,115,0,
+255,111,0,
+255,107,0,
+255,103,0,
+255,99,0,
+255,95,0,
+255,91,0,
+255,87,0,
+255,83,0,
+255,79,0,
+255,75,0,
+255,71,0,
+255,67,0,
+255,63,0,
+255,59,0,
+255,55,0,
+255,51,0,
+255,47,0,
+255,43,0,
+255,39,0,
+255,35,0,
+255,31,0,
+255,27,0,
+255,23,0,
+255,19,0,
+255,15,0,
+255,11,0,
+255,7,0,
+255,3,0,
+255,0,0,
+250,0,0,
+246,0,0,
+241,0,0,
+237,0,0,
+233,0,0,
+228,0,0,
+224,0,0,
+219,0,0,
+215,0,0,
+211,0,0,
+206,0,0,
+202,0,0,
+197,0,0,
+193,0,0,
+189,0,0,
+184,0,0,
+180,0,0,
+175,0,0,
+171,0,0,
+167,0,0,
+162,0,0,
+158,0,0,
+153,0,0,
+149,0,0,
+145,0,0,
+140,0,0,
+136,0,0,
+131,0,0,
+127,0,0
+};
+
+
+
+
+
+
+
diff --git a/privatemodules/nc4/share/hdf5_examples/hl/c/ptExampleFL.c b/privatemodules/nc4/share/hdf5_examples/hl/c/ptExampleFL.c
new file mode 100644
index 0000000000000000000000000000000000000000..bbd0bf6a9876f5bf87b8fe3f09844780e0ea714a
--- /dev/null
+++ b/privatemodules/nc4/share/hdf5_examples/hl/c/ptExampleFL.c
@@ -0,0 +1,107 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help@hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include "hdf5.h"
+#include "hdf5_hl.h"
+#include <stdlib.h>
+
+/*-------------------------------------------------------------------------
+ * Packet Table Fixed-Length Example
+ *
+ * Example program that creates a packet table and performs
+ * writes and reads.
+ *
+ *-------------------------------------------------------------------------
+ */
+
+int main(void)
+{
+ hid_t          fid;        /* File identifier */
+ hid_t          ptable;     /* Packet table identifier */
+
+ herr_t         err;        /* Function return status */
+ hsize_t        count;      /* Number of records in the table */
+
+ int            x;          /* Loop variable */
+
+    /* Buffers to hold data */
+ int writeBuffer[5];
+ int readBuffer[5];
+
+   /* Initialize buffers */
+ for(x=0; x<5; x++)
+ {
+     writeBuffer[x]=x;
+     readBuffer[x] = -1;
+ }
+
+    /* Create a file using default properties */
+ fid=H5Fcreate("packet_table_FLexample.h5",H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT);
+
+    /* Create a fixed-length packet table within the file */
+    /* This table's "packets" will be simple integers and it will use compression
+     * level 5. */
+ ptable = H5PTcreate_fl(fid, "Packet Test Dataset", H5T_NATIVE_INT, (hsize_t)100, 5);
+ if(ptable == H5I_INVALID_HID)
+     goto out;
+
+    /* Write one packet to the packet table */
+ err = H5PTappend(ptable, (hsize_t)1, &(writeBuffer[0]) );
+ if(err < 0)
+     goto out;
+
+    /* Write several packets to the packet table */
+ err = H5PTappend(ptable, (hsize_t)4, &(writeBuffer[1]) );
+ if(err < 0)
+     goto out;
+
+    /* Get the number of packets in the packet table.  This should be five. */
+ err = H5PTget_num_packets(ptable, &count);
+ if(err < 0)
+     goto out;
+
+ printf("Number of packets in packet table after five appends: %d\n", (int)count);
+
+    /* Initialize packet table's "current record" */
+ err = H5PTcreate_index(ptable);
+ if(err < 0)
+     goto out;
+
+    /* Iterate through packets, read each one back */
+ for(x=0; x<5; x++)
+ {
+    err = H5PTget_next(ptable, (hsize_t)1, &(readBuffer[x]) );
+    if(err < 0)
+	goto out;
+
+    printf("Packet %d's value is %d\n", x, readBuffer[x]);
+ }
+
+    /* Close the packet table */
+ err = H5PTclose(ptable);
+ if(err < 0)
+     goto out;
+
+    /* Close the file */
+ H5Fclose(fid);
+
+ return 0;
+
+ out: /* An error has occurred.  Clean up and exit. */
+    H5PTclose(ptable);
+    H5Fclose(fid);
+    return -1;
+}
+
diff --git a/privatemodules/nc4/share/hdf5_examples/hl/c/run-hlc-ex.sh b/privatemodules/nc4/share/hdf5_examples/hl/c/run-hlc-ex.sh
new file mode 100755
index 0000000000000000000000000000000000000000..ae3bac11fc6f6ab688df32bb30de0f9cc2a64c8e
--- /dev/null
+++ b/privatemodules/nc4/share/hdf5_examples/hl/c/run-hlc-ex.sh
@@ -0,0 +1,121 @@
+#! /bin/sh
+#
+# Copyright by The HDF Group.
+# All rights reserved.
+#
+# This file is part of HDF5.  The full HDF5 copyright notice, including
+# terms governing use, modification, and redistribution, is contained in
+# the files COPYING and Copyright.html.  COPYING can be found at the root
+# of the source code distribution tree; Copyright.html can be found at the
+# root level of an installed copy of the electronic HDF5 document set and
+# is linked from the top-level documents page.  It can also be found at
+# http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have
+# access to either file, you may request a copy from help@hdfgroup.org.
+
+#
+#  This file:  run-hlc-ex.sh
+# Written by:  Larry Knox
+#       Date:  May 11, 2010
+#
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+#                                                                               #
+# This script will compile and run the c examples from source files installed   #
+# in .../share/hdf5_examples/hl/c using h5cc or h5pc.  The order for running    #
+# programs with RunTest in the MAIN section below is taken from the Makefile.   #
+# The order is important since some of the test programs use data files created #
+# by earlier test programs.  Any future additions should be placed accordingly. #
+#                                                                               #
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+
+# Initializations
+EXIT_SUCCESS=0
+EXIT_FAILURE=1
+
+# Where the tool is installed.
+# default is relative path to installed location of the tools
+prefix="${prefix:-../../../../}"
+PARALLEL=no             # Am I in parallel mode?
+AR="ar"
+RANLIB="ranlib"
+if [ "$PARALLEL" = no ]; then
+    H5TOOL="h5cc"               # The tool name
+else
+    H5TOOL="h5pcc"               # The tool name
+fi
+H5TOOL_BIN="${prefix}/bin/${H5TOOL}"   # The path of the tool binary
+
+#### Run test ####
+RunTest()
+{
+    TEST_EXEC=$1
+    Test=$1".c"
+
+    echo
+    echo "#################  $1  #################"
+    ${H5TOOL_BIN} -o $TEST_EXEC $Test
+    if [ $? -ne 0 ]
+    then
+        echo "messed up compiling $Test"
+        exit 1
+    fi
+    ./$TEST_EXEC
+}
+
+
+
+##################  MAIN  ##################
+
+# Run tests
+if [ $? -eq 0 ]
+then
+    if (RunTest ex_lite1 &&\
+        rm ex_lite1 &&\
+        RunTest ex_lite2 &&\
+        rm ex_lite2 &&\
+        RunTest ex_lite3 &&\
+        rm ex_lite3 &&\
+        RunTest ptExampleFL &&\
+        rm ptExampleFL &&\
+        RunTest ex_image1 &&\
+        rm ex_image1 &&\
+        RunTest ex_image2 &&\
+        rm ex_image2 &&\
+        RunTest ex_table_01 &&\
+        rm ex_table_01 &&\
+        RunTest ex_table_02 &&\
+        rm ex_table_02 &&\
+        RunTest ex_table_03 &&\
+        rm ex_table_03 &&\
+        RunTest ex_table_04 &&\
+        rm ex_table_04 &&\
+        RunTest ex_table_05 &&
+        rm ex_table_05 &&
+        RunTest ex_table_06 &&\
+        rm ex_table_06 &&\
+        RunTest ex_table_07 &&\
+        rm ex_table_07 &&\
+        RunTest ex_table_08 &&\
+        rm ex_table_08 &&\
+        RunTest ex_table_09 &&\
+        rm ex_table_09 &&\
+        RunTest ex_table_10 &&\
+        rm ex_table_10 &&\
+        RunTest ex_table_11 &&\
+        rm ex_table_11 &&\
+        RunTest ex_table_12 &&\
+        rm ex_table_12 &&\
+        RunTest ex_ds1 &&\
+        rm ex_ds1); then
+        EXIT_VALUE=${EXIT_SUCCESS}
+    else
+        EXIT_VALUE=${EXIT_FAILURE}
+    fi
+fi
+
+# Cleanup
+rm *.o
+rm *.h5
+echo
+
+exit $EXIT_VALUE 
+
diff --git a/privatemodules/nc4/share/hdf5_examples/hl/run-hl-ex.sh b/privatemodules/nc4/share/hdf5_examples/hl/run-hl-ex.sh
new file mode 100755
index 0000000000000000000000000000000000000000..5fa97c09590fa85f856e1822006b93d8c88f4fb4
--- /dev/null
+++ b/privatemodules/nc4/share/hdf5_examples/hl/run-hl-ex.sh
@@ -0,0 +1,40 @@
+#! /bin/sh
+#
+# Copyright by The HDF Group.
+# All rights reserved.
+#
+# This file is part of HDF5.  The full HDF5 copyright notice, including
+# terms governing use, modification, and redistribution, is contained in
+# the files COPYING and Copyright.html.  COPYING can be found at the root
+# of the source code distribution tree; Copyright.html can be found at the
+# root level of an installed copy of the electronic HDF5 document set and
+# is linked from the top-level documents page.  It can also be found at
+# http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have
+# access to either file, you may request a copy from help@hdfgroup.org.
+
+#
+#  This file:  run-hl-ex.sh
+# Written by:  Larry Knox
+#       Date:  May 11, 2010
+#
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+#                                                                               #
+# This script will run the scripts to compile and run the hdf5 hl examples.     #
+#                                                                               #
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+
+if (echo "Run hl c examples" && \
+   (cd c; sh ./run-hlc-ex.sh) && \
+   (if test -d fortran; then
+       echo "Run hl fortran examples" 
+       cd fortran; sh ./run-hlfortran-ex.sh
+    fi) 
+   (if test -d c++; then 
+       echo "Run hl c++ examples"
+       cd c++; sh ./run-hlc++-ex.sh
+    fi)); then
+   echo "Finished running hl examples"
+   exit 0
+else
+   exit 1
+fi  
diff --git a/privatemodules/nc4/share/hdf5_examples/run-all-ex.sh b/privatemodules/nc4/share/hdf5_examples/run-all-ex.sh
new file mode 100755
index 0000000000000000000000000000000000000000..4ff2c55ec1c461d0927921e44d638c646d6ea948
--- /dev/null
+++ b/privatemodules/nc4/share/hdf5_examples/run-all-ex.sh
@@ -0,0 +1,46 @@
+#! /bin/sh
+#
+# Copyright by The HDF Group.
+# All rights reserved.
+#
+# This file is part of HDF5.  The full HDF5 copyright notice, including
+# terms governing use, modification, and redistribution, is contained in
+# the files COPYING and Copyright.html.  COPYING can be found at the root
+# of the source code distribution tree; Copyright.html can be found at the
+# root level of an installed copy of the electronic HDF5 document set and
+# is linked from the top-level documents page.  It can also be found at
+# http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have
+# access to either file, you may request a copy from help@hdfgroup.org.
+
+#
+#  This file:  run-hl-ex.sh
+# Written by:  Larry Knox
+#       Date:  May 11, 2010
+#
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+#                                                                               #
+# This script will run the scripts to compile and run the installed hdf5        #
+# examples.                                                                     #
+#                                                                               #
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+
+echo "Run c examples"
+if ((cd c; sh ./run-c-ex.sh) && \
+   (if test -d fortran; then   
+       echo "Run fortran examples" 
+       cd fortran; sh ./run-fortran-ex.sh 
+    fi) 
+   (if test -d c++; then
+       echo "Run c++ examples" 
+       cd c++; sh ./run-c++-ex.sh
+    fi)
+   (if test -d hl; then
+       echo "Run hl examples." 
+       cd hl; sh ./run-hl-ex.sh
+    fi)); then
+   echo "Done"
+   exit 0
+else
+   exit 1
+fi
+
diff --git a/privatemodules/nc4/share/man/man1/nccopy.1 b/privatemodules/nc4/share/man/man1/nccopy.1
new file mode 100644
index 0000000000000000000000000000000000000000..7a462a5e945fcec5af6c3dc9a94469063a2b7aa6
--- /dev/null
+++ b/privatemodules/nc4/share/man/man1/nccopy.1
@@ -0,0 +1,332 @@
+.\" $Id: nccopy.1 400 2010-08-27 21:02:52Z russ $
+.TH NCCOPY 1 "2012-03-08" "Release 4.2" "UNIDATA UTILITIES"
+.SH NAME
+nccopy \- Copy a netCDF file, optionally changing format, compression, or chunking in the output.
+.SH SYNOPSIS
+.ft B
+.HP
+nccopy
+.nh
+\%[\-k \fI kind_name \fP]
+\%[\-\fIkind_code\fP]
+\%[\-d \fI n \fP]
+\%[\-s]
+\%[\-c \fI chunkspec \fP]
+\%[\-u]
+\%[\-w]
+\%[\-[v|V] var1,...]
+\%[\-[g|G] grp1,...]
+\%[\-m \fI bufsize \fP]
+\%[\-h \fI chunk_cache \fP]
+\%[\-e \fI cache_elems \fP]
+\%[\-r]
+\%\fI infile \fP
+\%\fI outfile \fP
+.hy
+.ft
+.SH DESCRIPTION
+.LP
+The \fBnccopy\fP utility copies an input netCDF file in any supported
+format variant to an output netCDF file, optionally converting the
+output to any compatible netCDF format variant, compressing the data,
+or rechunking the data.  For example, if built with the netCDF-3
+library, a netCDF classic file may be copied to a netCDF 64-bit offset
+file, permitting larger variables.  If built with the netCDF-4
+library, a netCDF classic file may be copied to a netCDF-4 file or to
+a netCDF-4 classic model file as well, permitting data compression,
+efficient schema changes, larger variable sizes, and use of other
+netCDF-4 features.
+.LP
+If no output format is specified, with either \-k \fIkind_name\fP
+or \fI-kind_code\fP, then the output will use the same
+format as the input, unless the input is classic or 64-bit offset
+and either chunking or compression is specified, in which case the
+output will be netCDF-4 classic model format.  Attempting
+some kinds of format conversion will result in an error, if the
+conversion is not possible.  For example, an attempt to copy a
+netCDF-4 file that uses features of the enhanced model, such as
+groups or variable-length strings, to any of the other kinds of netCDF
+formats that use the classic model will result in an error.
+.LP
+\fBnccopy\fP also serves as an example of a generic netCDF-4 program,
+with its ability to read any valid netCDF file and handle nested
+groups, strings, and user-defined types, including arbitrarily
+nested compound types, variable-length types, and data of any valid
+netCDF-4 type.
+.LP
+If DAP support was enabled when \fBnccopy\fP was built, the file name may
+specify a DAP URL. This may be used to convert data on DAP servers to
+local netCDF files.
+.SH OPTIONS
+.IP "\fB \-k \fP \fI kind_name \fP"
+Use format name to specify the kind of file to be created
+and, by inference, the data model (i.e. netcdf-3 (classic) or
+netcdf-4 (enhanced)).  The possible arguments are:
+.RS
+.RS
+.IP "'nc3' or 'classic' => netCDF classic format"
+.IP "'nc6' or '64-bit offset' => netCDF 64-bit format"
+.IP "'nc4' or 'netCDF-4' => netCDF-4 format (enhanced data model)"
+.IP "'nc7' or 'netCDF-4 classic model' => netCDF-4 classic model format"
+.RE
+.RE
+.IP
+Note: The old format numbers '1', '2', '3', '4', equivalent
+to the format names 'nc3', 'nc6', 'nc4', or 'nc7' respectively, are
+also still accepted but deprecated, due to easy confusion between
+format numbers and format names.
+.IP "[\fB-\fP\fIkind_code\fP]"
+Use format numeric code (instead of format name) to specify the kind of file to be created
+and, by inference, the data model (i.e. netcdf-3 (classic) versus
+netcdf-4 (enhanced)).  The numeric codes are:
+.RS
+.RS
+.IP "3 => netcdf classic format"
+.IP "6 => netCDF 64-bit format"
+.IP "4 => netCDF-4 format (enhanced data model)"
+.IP "7 => netCDF-4 classic model format"
+.RE
+.RE
+The numeric code "7" is used because "7=3+4", specifying the format
+that uses the netCDF-3 data model for compatibility with the netCDF-4
+storage format for performance. Credit is due to NCO for use of these
+numeric codes instead of the old and confusing format numbers.
+.IP "\fB \-d \fP \fI n \fP"
+For netCDF-4 output, including netCDF-4 classic model, specify
+deflation level (level of compression) for variable data output.  0
+corresponds to no compression and 9 to maximum compression, with
+higher levels of compression requiring marginally more time to
+compress or uncompress than lower levels.  Compression achieved may
+also depend on output chunking parameters.  If this option is
+specified for a classic format or 64-bit offset format input file, it
+is not necessary to also specify that the output should be netCDF-4
+classic model, as that will be the default.  If this option is not
+specified and the input file has compressed variables, the compression
+will still be preserved in the output, using the same chunking as in
+the input by default.
+.IP
+Note that \fBnccopy\fP requires all variables to be compressed using the
+same compression level, but the API has no such restriction.  With
+a program you can customize compression for each variable independently.
+.IP "\fB \-s \fP"
+For netCDF-4 output, including netCDF-4 classic model, specify
+shuffling of variable data bytes before compression or after
+decompression.  Shuffling refers to interlacing of bytes in a chunk so
+that the first bytes of all values are contiguous in storage, followed
+by all the second bytes, and so on, which often improves compression.
+This option is ignored unless a non-zero deflation level is specified.
+Using \-d0 to specify no deflation on input data that has been
+compressed and shuffled turns off both compression and shuffling in
+the output.
+.IP "\fB \-u \fP"
+Convert any unlimited size dimensions in the input to fixed size
+dimensions in the output.  This can speed up variable-at-a-time
+access, but slow down record-at-a-time access to multiple variables
+along an unlimited dimension.
+.IP "\fB \-w \fP"
+Keep output in memory (as a diskless netCDF file) until output is
+closed, at which time output file is written to disk.  This can
+greatly speedup operations such as converting unlimited dimension to
+fixed size (\-u option), chunking, rechunking, or compressing the
+input.  It requires that available memory is large enough to hold the
+output file.  This option may provide a larger speedup than careful
+tuning of the \-m, \-h, or \-e options, and it's certainly a lot simpler.
+.IP "\fB \-c \fP \fIchunkspec\fP"
+For netCDF-4 output, including netCDF-4 classic model, specify
+chunking (multidimensional tiling) for variable data in the output.
+This is useful to specify the units of disk access, compression, or
+other filters such as checksums.  Changing the chunking in a netCDF
+file can also greatly speedup access, by choosing chunk shapes that
+are appropriate for the most common access patterns.
+.IP
+The \fIchunkspec\fP argument is a string of comma-separated associations,
+each specifying a dimension name, a '/' character, and optionally the
+corresponding chunk length for that dimension.  No blanks should
+appear in the chunkspec string, except possibly escaped blanks that
+are part of a dimension name.  A chunkspec names at least one
+dimension, and may omit dimensions which are not to be chunked or for
+which the default chunk length is desired.  If a dimension name is
+followed by a '/' character but no subsequent chunk length, the actual
+dimension length is assumed.  If copying a classic model file to a
+netCDF-4 output file and not naming all dimensions in the chunkspec,
+unnamed dimensions will also use the actual dimension length for the
+chunk length.  An example of a chunkspec for variables that use 'm'
+and 'n' dimensions might be 'm/100,n/200' to specify 100 by 200
+chunks. To see the chunking resulting from copying with a chunkspec,
+use the '\-s' option of ncdump on the output file.
+.IP
+The chunkspec '/' that omits all dimension names and
+corresponding chunk lengths specifies that no chunking is to occur in
+the output, so can be used to unchunk all the chunked variables.
+To see the chunking resulting from copying with a chunkspec,
+use the '\-s' option of ncdump on the output file.
+.IP
+As an I/O optimization, \fBnccopy\fP has a threshold for the minimum size of
+non-record variables that get chunked, currently 8192 bytes.  In the future,
+use of this threshold and its size may be settable in an option.
+.IP
+Note that \fBnccopy\fP requires variables that share a dimension to also
+share the chunk size associated with that dimension, but the
+programming interface has no such restriction.  If you need to
+customize chunking for variables independently, you will need to use
+the library API in a custom utility program.
+.IP "\fB \-v \fP \fI var1,... \fP"
+The output will include data values for the specified variables, in
+addition to the declarations of all dimensions, variables, and
+attributes. One or more variables must be specified by name in the
+comma-delimited list following this option. The list must be a single
+argument to the command, hence cannot contain unescaped blanks or
+other white space characters. The named variables must be valid netCDF
+variables in the input-file. A variable within a group in a netCDF-4
+file may be specified with an absolute path name, such as
+"/GroupA/GroupA2/var".  Use of a relative path name such as 'var' or
+"grp/var" specifies all matching variable names in the file.  The
+default, without this option, is to include data values for \fI all \fP variables
+in the output.
+.IP "\fB \-V \fP \fI var1,... \fP"
+The output will include the specified variables only but all dimensions and
+global or group attributes. One or more variables must be specified by name in the
+comma-delimited list following this option. The list must be a single argument
+to the command, hence cannot contain unescaped blanks or other white space
+characters. The named variables must be valid netCDF variables in the
+input-file. A variable within a group in a netCDF-4 file may be specified with
+an absolute path name, such as '/GroupA/GroupA2/var'.  Use of a relative path
+name such as 'var' or 'grp/var' specifies all matching variable names in the
+file.  The default, without this option, is to include \fI all \fP variables in the
+output.
+.IP "\fB \-g \fP \fI grp1,... \fP"
+The output will include data values only for the specified groups.
+One or more groups must be specified by name in the comma-delimited
+list following this option. The list must be a single argument to the
+command. The named groups must be valid netCDF groups in the
+input-file. The default, without this option, is to include data values for all
+groups in the output.
+.IP "\fB \-G \fP \fI grp1,... \fP"
+The output will include only the specified groups.
+One or more groups must be specified by name in the comma-delimited
+list following this option. The list must be a single argument to the
+command. The named groups must be valid netCDF groups in the
+input-file. The default, without this option, is to include all groups in the
+output.
+.IP "\fB \-m \fP \fI bufsize \fP"
+An integer or floating-point number that specifies the size, in bytes,
+of the copy buffer used to copy large variables.  A suffix of K, M, G,
+or T multiplies the copy buffer size by one thousand, million,
+billion, or trillion, respectively.  The default is 5 Mbytes,
+but will be increased if necessary to hold at least one chunk of
+netCDF-4 chunked variables in the input file.  You may want to specify
+a value larger than the default for copying large files over high
+latency networks.  Using the '\-w' option may provide better
+performance, if the output fits in memory.
+.IP "\fB \-h \fP \fI chunk_cache \fP"
+For netCDF-4 output, including netCDF-4 classic model, an integer or
+floating-point number that specifies the size in bytes of chunk cache
+allocated for each chunked variable.  This is not a property of the file, but merely
+a performance tuning parameter for avoiding compressing or
+decompressing the same data multiple times while copying and changing
+chunk shapes.  A suffix of K, M, G, or T multiplies the chunk cache
+size by one thousand, million, billion, or trillion, respectively.
+The default is 4.194304 Mbytes (or whatever was specified for the
+configure-time constant CHUNK_CACHE_SIZE when the netCDF library was
+built).  Ideally, the \fBnccopy\fP utility should accept only one memory
+buffer size and divide it optimally between a copy buffer and chunk
+cache, but no general algorithm for computing the optimum chunk cache
+size has been implemented yet. Using the '\-w' option may provide
+better performance, if the output fits in memory.
+.IP "\fB \-e \fP \fI cache_elems \fP"
+For netCDF-4 output, including netCDF-4 classic model, specifies
+number of chunks that the chunk cache can hold. A suffix of K, M, G,
+or T multiplies the number of chunks that can be held in the cache
+by one thousand, million, billion, or trillion, respectively.  This is not a
+property of the file, but merely a performance tuning parameter for
+avoiding compressing or decompressing the same data multiple times
+while copying and changing chunk shapes.  The default is 1009 (or
+whatever was specified for the configure-time constant
+CHUNK_CACHE_NELEMS when the netCDF library was built).  Ideally, the
+\fBnccopy\fP utility should determine an optimum value for this parameter,
+but no general algorithm for computing the optimum number of chunk
+cache elements has been implemented yet.
+.IP "\fB \-r \fP"
+Read netCDF classic or 64-bit offset input file into a diskless netCDF
+file in memory before copying.  Requires that input file be small
+enough to fit into memory.  For \fBnccopy\fP, this doesn't seem to provide
+any significant speedup, so may not be a useful option.
+.SH EXAMPLES
+.LP
+Make a copy of foo1.nc, a netCDF file of any type, to foo2.nc, a
+netCDF file of the same type:
+.RS
+.HP
+nccopy foo1.nc foo2.nc
+.RE
+.LP
+Note that the above copy will not be as fast as use of cp or other
+simple copy utility, because the file is copied using only the netCDF
+API.  If the input file has extra bytes after the end of the netCDF
+data, those will not be copied, because they are not accessible
+through the netCDF interface.  If the original file was generated in
+"No fill" mode so that fill values are not stored for padding for data
+alignment, the output file may have different padding bytes.
+.LP
+Convert a netCDF-4 classic model file, compressed.nc, that uses compression,
+to a netCDF-3 file classic.nc:
+.RS
+.HP
+nccopy \-k classic compressed.nc classic.nc
+.RE
+.LP
+Note that 'nc3' could be used instead of 'classic'.
+.LP
+Download the variable 'time_bnds' and its associated attributes from
+an OPeNDAP server and copy the result to a netCDF file named 'tb.nc':
+.RS
+.HP
+nccopy 'http://test.opendap.org/opendap/data/nc/sst.mnmean.nc.gz?time_bnds' tb.nc
+.RE
+.LP
+Note that URLs that name specific variables as command-line arguments
+should generally be quoted, to avoid the shell interpreting special
+characters such as '?'.
+.LP
+Compress all the variables in the input file foo.nc, a netCDF file of any
+type, to the output file bar.nc:
+.RS
+.HP
+nccopy \-d1 foo.nc bar.nc
+.RE
+.LP
+If foo.nc was a classic or 64-bit offset netCDF file, bar.nc will be a
+netCDF-4 classic model netCDF file, because the classic and 64-bit
+offset format variants don't support compression.  If foo.nc was a
+netCDF-4 file with some variables compressed using various deflation
+levels, the output will also be a netCDF-4 file of the same type, but
+all the variables, including any uncompressed variables in the input,
+will now use deflation level 1.
+.LP
+Assume the input data includes gridded variables that use time, lat,
+lon dimensions, with 1000 times by 1000 latitudes by 1000 longitudes,
+and that the time dimension varies most slowly.  Also assume that
+users want quick access to data at all times for a small set of
+lat-lon points.  Accessing data for 1000 times would typically require
+accessing 1000 disk blocks, which may be slow.
+.LP
+Reorganizing the data into chunks on disk that have all the time in
+each chunk for a few lat and lon coordinates would greatly speed up
+such access.  To chunk the data in the input file slow.nc, a netCDF
+file of any type, to the output file fast.nc, you could use;
+.RS
+.HP
+nccopy \-c time/1000,lat/40,lon/40 slow.nc fast.nc
+.RE
+.LP
+to specify data chunks of 1000 times, 40 latitudes, and 40 longitudes.
+If you had enough memory to contain the output file, you could speed
+up the rechunking operation significantly by creating the output in
+memory before writing it to disk on close:
+.RS
+.HP
+nccopy \-w \-c time/1000,lat/40,lon/40 slow.nc fast.nc
+.RE
+.SH "SEE ALSO"
+.LP
+.BR ncdump(1), ncgen(1), netcdf(3)
diff --git a/privatemodules/nc4/share/man/man1/ncdump.1 b/privatemodules/nc4/share/man/man1/ncdump.1
new file mode 100644
index 0000000000000000000000000000000000000000..9e241bb887273ad2a0f2a280fffd729ecd2d6c9e
--- /dev/null
+++ b/privatemodules/nc4/share/man/man1/ncdump.1
@@ -0,0 +1,278 @@
+.\" $Header: /upc/share/CVS/netcdf-3/ncdump/ncdump.1,v 1.10 2009/07/28 14:48:36 russ Exp $
+.TH NCDUMP 1 "2012-03-08" "Release 4.2" "UNIDATA UTILITIES"
+.SH NAME
+ncdump \- Convert netCDF file to text form (CDL)
+.SH SYNOPSIS
+.ft B
+.HP
+ncdump
+.nh
+\%[\-chistxw]
+\%[\-v \fIvar1,...\fP]
+\%[\-b \fIlang\fP]
+\%[\-f \fIlang\fP]
+\%[\-l \fIlen\fP]
+\%[\-n \fIname\fP]
+\%[\-p \fIf_digits[,d_digits]\fP]
+\%[\-g \fIgrp1,...\fP]
+\%\fIfile\fP
+.br
+.ft B
+.HP
+ncdump
+.nh
+\%-k
+\%\fIfile\fP
+.hy
+.ft
+.SH DESCRIPTION
+.LP
+The \fBncdump\fP utility generates a text representation of a
+specified netCDF file on standard output, optionally excluding some or
+all of the variable data in the output.  The text representation is in
+a form called CDL (network Common Data form Language) that can be
+viewed, edited, or serve as input to \fBncgen\fP, a companion program
+that can generate a binary netCDF file from a CDL file.  Hence
+\fBncgen\fP and \fBncdump\fP can be used as inverses to transform the
+data representation between binary and text representations.  See
+\fBncgen\fP documentation for a description of CDL and netCDF
+representations.
+.LP
+\fBncdump\fP may also be used to determine what kind of netCDF file is used
+(which variant of the netCDF file format) with the \-k option.
+.LP
+If DAP support was enabled when \fBncdump\fP was built, the file name
+may specify a DAP URL. This allows \fBncdump\fP to access data sources
+from DAP servers, including data in other formats than netCDF.  When
+used with DAP URLs, \fBncdump\fP shows the translation from the DAP
+data model to the netCDF data model.
+.LP
+\fBncdump\fP may also be used as a simple browser for netCDF data
+files, to display the dimension names and lengths; variable names, types,
+and shapes; attribute names and values; and optionally, the values of
+data for all variables or selected variables in a netCDF file.  For
+netCDF-4 files, groups and user-defined types are also included in
+ncdump output.
+.LP
+\fBncdump\fP uses `_' to represent data values that are equal to the
+`_FillValue' attribute for a variable, intended to represent data that
+has not yet been written.  If a variable has no `_FillValue'
+attribute, the default fill value for the variable type is used unless
+the variable is of byte type.
+.LP
+\fBncdump\fP defines a default display format used for each type of
+netCDF data, but this can be changed if a `C_format' attribute is
+defined for a netCDF variable.  In this case, \fBncdump\fP will use
+the `C_format' attribute to format each value.  For example, if
+floating-point data for the netCDF variable `Z' is known to be
+accurate to only three significant digits, it would be appropriate to
+use the variable attribute
+
+.RS
+.HP
+Z:C_format = "%.3g"
+.RE
+.SH OPTIONS
+.IP "\fB-c\fP"
+Show the values of \fIcoordinate\fP variables (1D variables with the
+same names as dimensions) as well as the declarations of all
+dimensions, variables, attribute values, groups, and user-defined
+types.  Data values of non-coordinate variables are not included in
+the output.  This is usually the most suitable option to use for a brief look
+at the structure and contents of a netCDF file.
+.IP "\fB-h\fP"
+Show only the \fIheader\fP information in the output, that is, output only
+the declarations for the dimensions, variables, attributes,
+groups, and user-defined types of the input file, but no data values for
+any variables.  The output is identical to using the \fB-c\fP option except
+that the values of coordinate variables are not included.  (At most one of
+\fB-c\fP or \fB-h\fP options may be present.)
+.IP "\fB-v\fP \fIvar1,...\fP"
+The output will include data values for the specified variables, in
+addition to the declarations of all dimensions, variables, and
+attributes.  One or more variables must be specified by name in the
+comma-delimited list following this option.  The list must be a single
+argument to the command, hence cannot contain unescaped blanks or
+other white space characters.  The named variables must be valid
+netCDF variables in the input-file.  A variable within a group in a
+netCDF-4 file may be specified with an absolute path name, such as
+`/GroupA/GroupA2/var'.  Use of a relative path name such as `var' or
+`grp/var' specifies all matching variable names in the file.  The
+default, without this option and in the absence of the \fB-c\fP or
+\fB-h\fP options, is to include data values for \fIall\fP variables in
+the output.
+.IP "\fB-b\fP \fI[c|f]\fP"
+A brief annotation in the form of a CDL comment (text beginning with the
+characters ``//'') will be included in the data section of the output for
+each `row' of data, to help identify data values for multidimensional
+variables.  If \fIlang\fP begins with `C' or `c', then C language
+conventions will be used (zero-based indices, last dimension varying
+fastest).  If \fIlang\fP begins with `F' or `f', then Fortran language
+conventions will be used (one-based indices, first dimension varying
+fastest).  In either case, the data will be presented in the same order;
+only the annotations will differ.  This option may be useful for browsing
+through large volumes of multidimensional data.
+.IP "\fB-f\fP \fI[c|f]\fP"
+Full annotations in the form of trailing CDL comments (text beginning
+with the characters ``//'') for every data value (except individual
+characters in character arrays) will be included in the data section.
+If \fIlang\fP begins with `C' or `c', then C language conventions will
+be used.  If \fIlang\fP begins with `F' or `f', then Fortran language
+conventions will be used.  In either case, the data will be presented
+in the same order; only the annotations will differ.  This option may
+be useful for piping data into other filters, since each data value
+appears on a separate line, fully identified. (At most one of '\-b' or '\-f' options may be present.)
+.IP "\fB-l\fP \fIlength\fP"
+Changes the default maximum line length (80) used in formatting lists of
+non-character data values.
+.IP "\fB-n\fP \fIname\fP"
+CDL requires a name for a netCDF file, for use by \fBncgen \-b\fP in
+generating a default netCDF file name.  By default, \fIncdump\fP constructs
+this name from the last component of the file name of the input netCDF file
+by stripping off any extension it has.  Use the \fB-n\fP option to specify a
+different name.  Although the output file name used by \fBncgen \-b\fP can be
+specified, it may be wise to have \fIncdump\fP change the default name to
+avoid inadvertently overwriting a valuable netCDF file when using
+\fBncdump\fP, editing the resulting CDL file, and using \fBncgen \-b\fP to
+generate a new netCDF file from the edited CDL file.
+.IP "\fB-p\fP \fIfloat_digits[,double_digits]\fP"
+Specifies default precision (number of significant digits) to use in
+displaying floating-point or double precision data values for
+attributes and variables.  If specified, this value overrides the
+value of the C_format attribute, if any, for a variable.
+Floating-point data will be displayed with \fIfloat_digits\fP
+significant digits.  If \fIdouble_digits\fP is also specified,
+double-precision values will be displayed with that many significant
+digits.  In the absence of any \fB-p\fP specifications, floating-point
+and double-precision data are displayed with 7 and 15 significant
+digits respectively.  CDL files can be made smaller if less precision
+is required.  If both floating-point and double precisions are
+specified, the two values must appear separated by a comma (no blanks)
+as a single argument to the command.  (To represent every last bit of
+precision in a CDL file for all possible floating-point values
+would require \fB-p 9,17\fP.)
+.IP "\fB-k\fP"
+Show kind of netCDF file the pathname references, one of
+`classic', `64-bit offset',`netCDF-4', or `netCDF-4 classic model'.  Before version
+3.6, there was only one kind of netCDF file, designated as `classic'
+(also know as format variant 1).  Large file support introduced
+another variant of the format, designated as `64-bit offset' (known as
+format variant 2).  NetCDF-4, uses a third variant of the format,
+`netCDF-4' (format variant 3).  Another format variant, designated
+`netCDF-4 classic model' (format variant 4), is restricted
+to features supported by the netCDF-3 data model but represented using
+the HDF5 format, so that an unmodified netCDF-3 program can read or
+write the file just by relinking with the netCDF-4 library.  
+The string output by using the `\-k' option may be provided as the
+value of the `\-k' option to ncgen(1) to
+specify exactly what kind of netCDF file to generate, when you want to
+override the default inferred from the CDL.
+.IP "\fB-s\fP"
+Output special virtual attributes that provide performance-related
+information about the file format and variable properties for netCDF-4
+data.  These special virtual attributes are not actually part of the
+data, they are merely a convenient way to display miscellaneous
+properties of the data in CDL (and eventually NcML).  They include 
+`_ChunkSizes', 
+`_DeflateLevel', 
+`_Endianness', 
+`_Fletcher32', 
+`_Format',
+`_NoFill',
+`_Shuffle', and
+`_Storage'.  
+`_ChunkSizes' is a list of chunk sizes for each dimension of the variable. 
+`_DeflateLevel' is an
+integer between 0 and 9 inclusive if compression has been specified
+for the variable.
+`_Endianness' is either `little' or `big', depending on
+how the variable was stored when first written. 
+`_Fletcher32' is `true' if the checksum property was set for
+the variable. 
+`_Format' is a global attribute specifying the netCDF format
+variant, one of `classic', `64-bit offset', `netCDF-4', or `netCDF-4
+classic model'.  
+`_NoFill' is `true' if the persistent NoFill property was set for the
+variable when it was defined.
+`_Shuffle' is `true' if use of the shuffle filter was specified for the variable.
+`_Storage' is `contiguous' or `chunked', depending on how the
+variable's data is stored.
+.IP "\fB-t\fP"
+Controls display of time data, if stored in a variable that uses
+a udunits compliant time representation such as `days since
+1970-01-01' or `seconds since 2009-03-15 12:01:17', a variable
+identified in a "bounds" attribute of such a time variable, or a numeric
+attribute of a time variable.  If this option is
+specified, time data values are displayed as human-readable date-time
+strings rather than numerical values, interpreted in terms of a 
+`calendar' variable attribute, if specified.  For numeric attributes
+of time variables, the human-readable time value is displayed after the
+actual value, in an associated CDL comment.  Calendar attribute
+values interpreted with this option include the CF Conventions values
+`gregorian' or `standard', `proleptic_gregorian', `noleap' or `365_day',
+`all_leap' or `366_day', `360_day', and `julian'.
+.IP "\fB-i\fP"
+Same as the '\-t' option, except output time data as date-time strings
+with ISO-8601 standard 'T' separator, instead of a blank.
+.IP "\fB-g\fP \fIgrp1,...\fP"
+For netCDF-4 files, the output will include data values only for the
+specified groups.  One or more groups must be specified by name in the
+comma-delimited list following this option. The list must be a single
+argument to the command. The named groups must be valid netCDF groups
+in the input-file.  A group in a netCDF-4 file may be specified with
+an absolute or relative path name.  Use of a relative path name
+specifies all matching group names in the file.  The default, without
+this option and in the absence of the \fB-c\fP or \fB-h\fP options, is
+to include data values for \fIall\fP groups in the output.
+.IP "\fB-w\fP"
+For file names that request remote access using DAP URLs, access data
+with client-side caching of entire variables.
+.IP "\fB-x\fP"
+Output XML (NcML) instead of CDL.  The NcML does not include data values.
+The NcML output option currently only works for netCDF classic model data.
+.SH EXAMPLES
+.LP
+Look at the structure of the data in the netCDF file `\fBfoo.nc\fP':
+.RS
+.HP
+ncdump \-c foo.nc
+.RE
+.LP
+Produce an annotated CDL version of the structure and data in the
+netCDF file `\fBfoo.nc\fP', using C-style indexing for the annotations:
+.RS
+.HP
+ncdump \-b c foo.nc > foo.cdl
+.RE
+.LP
+Output data for only the variables `uwind' and `vwind' from the netCDF file
+`\fBfoo.nc\fP', and show the floating-point data with only three significant
+digits of precision:
+.RS
+.HP
+ncdump \-v uwind,vwind \-p 3 foo.nc
+.RE
+.LP
+Produce a fully-annotated (one data value per line) listing of the data for
+the variable `omega', using Fortran conventions for indices, and changing the
+netCDF dataset name in the resulting CDL file to `omega':
+.RS
+.HP
+ncdump \-v omega \-f fortran \-n omega foo.nc > Z.cdl
+.RE
+.SH "SEE ALSO"
+.LP
+.BR ncgen (1),
+.BR netcdf (3)
+.SH BUGS
+.LP
+Character arrays that contain a null-byte are treated like C strings, so no
+characters after the null byte appear in the output.
+.LP
+Multidimensional character string arrays are not handled well, since the CDL
+syntax for breaking a long character string into several shorter lines is
+weak.
+.LP
+There should be a way to specify that the data should be displayed in
+`record' order, that is with the all the values for `record' variables
+together that have the same value of the record dimension.
diff --git a/privatemodules/nc4/share/man/man1/ncgen.1 b/privatemodules/nc4/share/man/man1/ncgen.1
new file mode 100644
index 0000000000000000000000000000000000000000..77a87c247ddcc37fc931ed553bec82c3b91f1824
--- /dev/null
+++ b/privatemodules/nc4/share/man/man1/ncgen.1
@@ -0,0 +1,1240 @@
+.\" $Header: /upc/share/CVS/netcdf-3/ncgen/ncgen.1,v 1.10 2010/04/29 16:38:55 dmh Exp $
+.TH NCGEN 1 "$Date: 2010/04/29 16:38:55 $" "Printed: \n(yr-\n(mo-\n(dy" "UNIDATA UTILITIES"
+.SH NAME
+ncgen \- From a CDL file generate a netCDF-3 file, a netCDF-4 file or a C program
+.SH SYNOPSIS
+.HP
+ncgen
+.nh
+\%[\-b]
+\%[\-c]
+\%[\-f]
+\%[\-k \fIformat_name\fP]
+\%[\-\fIformat_code\fP]
+\%[\-l \fIoutput language\fP]
+\%[\-n]
+\%[\-o \fInetcdf_filename\fP]
+\%[\-x]
+\%[\fIinput_file\fP]
+.hy
+.ft
+.SH DESCRIPTION
+\fBncgen\fP generates either a netCDF-3 (i.e. classic) binary .nc file,
+a netCDF-4 (i.e. enhanced) binary .nc file
+or a file in some source language that when executed will
+construct the corresponding binary .nc file.
+The input to \fBncgen\fP is a description of a netCDF
+file in a small language known as CDL (network Common Data form Language),
+described below.  Input is read from standard input if no input_file
+is specified.
+If no options are specified in invoking \fBncgen\fP, it merely checks the
+syntax of the input CDL file, producing error messages for
+any violations of CDL syntax.  Other options can be used, for example,
+to create the corresponding netCDF file,
+or to generate a C program that uses the netCDF C
+interface to create the netCDF file.
+.LP
+Note that this version of ncgen was originally called ncgen4.
+The older ncgen program has been renamed to ncgen3.
+.LP
+\fBncgen\fP may be used with the companion program \fBncdump\fP to perform
+some simple operations on netCDF files.  For example, to rename a dimension
+in a netCDF file, use \fBncdump\fP to get a CDL version of the netCDF file,
+edit the CDL file to change the name of the dimensions, and use \fBncgen\fP
+to generate the corresponding netCDF file from the edited CDL file.
+.SH OPTIONS
+.IP "\fB-b\fP"
+Create a (binary) netCDF file.  If the \fB-o\fP option is absent, a
+default file name will be constructed from the basename of the CDL
+file, with any suffix replaced by the `.nc' extension.  If a
+file already exists with the specified name, it will be overwritten.
+.IP "\fB-c\fP"
+Generate
+.B C
+source code that will create a netCDF file
+matching the netCDF specification.  The C source code is written to
+standard output; equivalent to \-lc.
+.IP "\fB-f\fP"
+Generate
+.B FORTRAN 77
+source code that will create a netCDF file
+matching the netCDF specification.
+The source code is written to
+standard output; equivalent to \-lf77.
+.IP "\fB-o\fP \fRnetcdf_file\fP"
+Name of the file to pass to calls to "nc_create()".
+If this option is specified it implies
+(in the absence of any explicit \-l flag) the "\fB-b\fP" option.
+This option is necessary because netCDF files
+cannot be written directly to standard output, since standard output is not
+seekable.
+.IP "\fB-k \fIformat_name\fP"
+.IP "\fB-\fIformat_code\fP"
+The \-k flag specifies the format of the file to be created and, by inference,
+the data model accepted by ncgen (i.e. netcdf-3 (classic) versus
+netcdf-4 vs netcdf-5). As a shortcut, a numeric \fIformat_code\fP may be specified instead.
+The possible \fIformat_name\fP values for the \-k option are:
+.RS
+.RS
+.IP "'classic' or 'nc3' => netCDF classic format"
+.IP "'64-bit offset' or 'nc6' => netCDF 64-bit format"
+.IP "'64-bit data or 'nc5' => netCDF-5 (64-bit data) format"
+.IP "'netCDF-4' 0r 'nc4' => netCDF-4 format (enhanced data model)"
+.IP "'netCDF-4 classic model' or 'nc7' => netCDF-4 classic model format"
+.RE
+.RE
+Accepted \fIformat_number\fP arguments, just shortcuts for format_names, are:
+.RS
+.RS
+.IP "3 => netcdf classic format"
+.IP "5 => netcdf 5 format"
+.IP "6 => netCDF 64-bit format"
+.IP "4 => netCDF-4 format (enhanced data model)"
+.IP "7 => netCDF-4 classic model format"
+.RE
+.RE
+The numeric code "7" is used because "7=3+4", a mnemonic for the format
+that uses the netCDF-3 data model for compatibility with the netCDF-4
+storage format for performance. Credit is due to NCO for use of these
+numeric codes instead of the old and confusing format numbers.
+.LP
+Note: The old version format numbers '1', '2', '3', '4', equivalent
+to the format names 'nc3', 'nc6', 'nc4', or 'nc7' respectively, are
+also still accepted but deprecated, due to easy confusion between
+format numbers and format names. Various old format name aliases are
+also accepted but deprecated, e.g. 'hdf5', 'enhanced-nc3', etc.
+Also, note that \-v is accepted to mean the same thing as
+\-k for backward compatibility.
+.IP "\fB-x\fP"
+Don't initialize data with fill values.  This can speed up creation of
+large netCDF files greatly, but later attempts to read unwritten data
+from the generated file will not be easily detectable.
+.IP "\fB-l \fRoutput_language\fP"
+The \-l flag specifies the output language to use
+when generating source code that will create or define a netCDF file
+matching the netCDF specification.
+The output is written to standard output.
+The currently supported languages have the following flags.
+.RS
+.RS
+.IP "c|C' => C language output."
+.IP "f77|fortran77' => FORTRAN 77 language output"
+; note that currently only the classic model is supported.
+.IP "j|java' => (experimental) Java language output"
+; targets the existing Unidata Java interface, which means that
+only the classic model is supported.
+.RE
+.RE
+.SH Choosing the output format
+The choice of output format is determined by three flags.
+.IP "\fB-k flag.\fP"
+.IP "\fB_Format attribute (see below).\fP"
+.IP "\fBOccurrence of CDF-5 (64-bit data) or
+netcdf-4 constructs in the input CDL.\fP"
+The term "netCDF-4 constructs" means
+constructs from the enhanced data model,
+not just special performance-related attributes such as
+ _ChunkSizes, _DeflateLevel, _Endianness, etc.
+The term "CDF-5 constructs" means
+extended unsigned integer types allowed in the 64-bit data model.
+.LP
+Note that there is an ambiguity between the netCDF-4 case
+and the CDF-5 case is only an unsigned type is seen in the input.
+.LP
+The rules are as follows, in order of application.
+.IP "\fB1.\fP"
+If either Fortran or Java output is specified,
+then \-k flag value of 1 (classic model) will be used.
+Conflicts with the use of enhanced constructs
+in the CDL will report an error.
+.IP "\fB2.\fP"
+If both the \-k flag and _Format attribute are specified,
+the _Format flag will be ignored.
+If no \-k flag is specified, and a _Format attribute value
+is specified, then the \-k flag value
+will be set to that of the _Format attribute.
+Otherwise the \-k flag is undefined.
+.IP "\fB3.\fP"
+If the \-k option is defined and is consistent with the CDL,
+ncgen will output a file in the requested form,
+else an error will be reported.
+.IP "\fB4.\fP"
+If the \-k flag is undefined,
+and if there are CDF-5 constructs, only, in the CDL,
+a \-k flag value of 5 (64-bit data model) will be used.
+If there are true netCDF-4 constructs in the CDL,
+a \-k flag value of 3 (enhanced model) will be used.
+.IP "\fB5.\fP"
+If special performance-related attributes are specified in the CDL,
+a \-k flag value of 4 (netCDF-4 classic model) will be used.
+.IP "\fB6.\fP"
+Otherwise ncgen will set the \-k flag to 1 (classic model).
+.RE
+.SH EXAMPLES
+.LP
+Check the syntax of the CDL file `\fBfoo.cdl\fP':
+.RS
+.HP
+ncgen foo.cdl
+.RE
+.LP
+From the CDL file `\fBfoo.cdl\fP', generate an equivalent binary netCDF file
+named `\fBx.nc\fP':
+.RS
+.HP
+ncgen \-o x.nc foo.cdl
+.RE
+.LP
+From the CDL file `\fBfoo.cdl\fP', generate a C program containing the
+netCDF function invocations necessary to create an equivalent binary netCDF
+file named `\fBx.nc\fP':
+.RS
+.HP
+ncgen \-lc foo.cdl >x.c
+.RE
+.LP
+.SH USAGE
+.SS "CDL Syntax Overview"
+.LP
+Below is an example of CDL syntax, describing a netCDF file with several
+named dimensions (lat, lon, and time), variables (Z, t, p, rh, lat, lon,
+time), variable attributes (units, long_name, valid_range, _FillValue),
+and some data.  CDL keywords are in boldface.  (This example is intended to
+illustrate the syntax; a real CDL file would have a more complete set of
+attributes so that the data would be more completely self-describing.)
+.RS
+.nf
+netcdf foo {  // an example netCDF specification in CDL
+
+\fBtypes\fP:
+    \fIubyte\fP \fIenum\fP enum_t {Clear = 0, Cumulonimbus = 1, Stratus = 2};
+    \fIopaque\fP(11) opaque_t;
+    \fIint\fP(*) vlen_t;
+
+\fBdimensions\fP:
+	lat = 10, lon = 5, time = \fIunlimited\fP ;
+
+\fBvariables\fP:
+	\fIlong\fP    lat(lat), lon(lon), time(time);
+	\fIfloat\fP   Z(time,lat,lon), t(time,lat,lon);
+	\fIdouble\fP  p(time,lat,lon);
+	\fIlong\fP    rh(time,lat,lon);
+
+	\fIstring\fP  country(time,lat,lon);
+	\fIubyte\fP   tag;
+
+	// variable attributes
+	lat:long_name = "latitude";
+	lat:units = "degrees_north";
+	lon:long_name = "longitude";
+	lon:units = "degrees_east";
+	time:units = "seconds since 1992-1-1 00:00:00";
+
+	// typed variable attributes
+	\fIstring\fP Z:units = "geopotential meters";
+	\fIfloat\fP Z:valid_range = 0., 5000.;
+	\fIdouble\fP p:_FillValue = \-9999.;
+	\fIlong\fP rh:_FillValue = \-1;
+	\fIvlen_t\fP :globalatt = {17, 18, 19};
+\fBdata\fP:
+	lat   = 0, 10, 20, 30, 40, 50, 60, 70, 80, 90;
+	lon   = \-140, \-118, \-96, \-84, \-52;
+\fBgroup\fP: g {
+\fBtypes\fP:
+    \fIcompound\fP cmpd_t { \fIvlen_t\fP f1; \fIenum_t\fP f2;};
+} // group g
+\fBgroup\fP: h {
+\fBvariables\fP:
+	/g/\fIcmpd_t\fP  compoundvar;
+\fBdata\fP:
+        compoundvar = { {3,4,5}, enum_t.Stratus } ;
+} // group h
+}
+.fi
+.RE
+.LP
+All CDL statements are terminated by a semicolon.  Spaces, tabs,
+and newlines can be used freely for readability.
+Comments may follow the characters `//' on any line.
+.LP
+A CDL description consists of five optional parts:
+\fItypes\fP,
+\fIdimensions\fP,
+\fIvariables\fP,
+\fIdata\fP,
+beginning with the keyword
+.BR `types:' ,
+.BR `dimensions:' ,
+.BR `variables:' ,
+and
+.BR `data:',
+respectively.
+Note several things:
+(1) the keyword includes the trailing colon, so there must not be any space before the colon character,
+and (2) the keywords are required to be lower case.
+.LP
+The \fBvariables:\fP section may contain \fIvariable declarations\fP
+and \fIattribute assignments\fP.
+All sections may contain global attribute assignments.
+.LP
+In addition, after the \fBdata:\fP section, the user
+may define a series of groups (see the example above).
+Groups themselves can contain types, dimensions, variables,
+data, and other (nested) groups.
+.LP
+The netCDF \fBtypes:\fP section declares the user defined types.
+These may be constructed using any of the following types:
+\fBenum\fP, \fBvlen\fP, \fBopaque\fP, or \fBcompound\fP.
+.LP
+A netCDF \fIdimension\fP is used to define the shape of one or more of the
+multidimensional variables contained in the netCDF file.  A netCDF
+dimension has a name and a size.  A dimension
+can have the \fBunlimited\fP size, which means a variable using this
+dimension can grow to any length in that dimension.
+.LP
+A \fIvariable\fP represents a multidimensional array of values of the
+same type.  A variable has a name, a data type, and a shape described
+by its list of dimensions.  Each variable may also have associated
+\fIattributes\fP (see below) as well as data values.  The name, data
+type, and shape of a variable are specified by its declaration in the
+\fIvariable\fP section of a CDL description.  A variable may have the same
+name as a dimension; by convention such a variable is one-dimensional
+and contains coordinates of the dimension it names.  Dimensions need
+not have corresponding variables.
+.LP
+A netCDF \fIattribute\fP contains information about a netCDF variable or
+about the whole netCDF dataset.  Attributes are used
+to specify such properties as units, special values, maximum and
+minimum valid values, scaling factors, offsets, and parameters.  Attribute
+information is represented by single values or arrays of values.  For
+example, "units" is an attribute represented by a character array such
+as "celsius".  An attribute has an associated variable, a name,
+a data type, a length, and a value.  In contrast to variables that are
+intended for data, attributes are intended for metadata (data about
+data).
+Unlike netCDF-3, attribute types can be any user defined type
+as well as the usual built-in types.
+.LP
+In CDL, an attribute is designated by a
+a type, a variable, a ':', and then an attribute name.
+The type is optional and if missing, it will be inferred from the values
+assigned to the attribute.
+It is possible to assign \fIglobal\fP attributes
+not associated with any variable to the netCDF as a whole by omitting
+the variable name in the attribute declaration.
+Notice that there is a potential ambiguity in a specification such as
+.nf
+x : a = ...
+.fi
+In this situation, x could be either a type for a global attribute,
+or the variable name for an attribute. Since there could both be a type named
+x and a variable named x, there is an ambiguity.
+The rule is that in this situation, x will be interpreted as a
+type if possible, and otherwise as a variable.
+.LP
+If not specified, the data type of an attribute in CDL
+is derived from the type of the value(s) assigned to it.  The length of
+an attribute is the number of data values assigned to it, or the
+number of characters in the character string assigned to it.  Multiple
+values are assigned to non-character attributes by separating the
+values with commas.  All values assigned to an attribute must be of
+the same type.
+.LP
+The names for CDL dimensions, variables, attributes, types, and groups
+may contain any non-control utf-8 character
+except the forward slash character (`/').
+However, certain characters must escaped if they are used in a name,
+where the escape character is the backward slash `\\'.
+In particular, if the leading character off the name is a digit (0-9),
+then it must be preceded by the escape character.
+In addition, the characters ` !"#$%&()*,:;<=>?[]^`\'{}|~\\'
+must be escaped if they occur anywhere in a name.
+Note also that attribute names that begin with an underscore (`_')
+are reserved for the use of Unidata and should not be used in user
+defined attributes.
+.LP
+Note also that the words
+`variable',
+`dimension',
+`data',
+`group',
+and `types'
+are legal CDL names, but be careful that there is a space
+between them and any following colon character when used as a variable name.
+This is mostly an issue with attribute declarations.
+For example, consider this.
+.HP
+.RS
+.nf
+ netcdf ... {
+ ...
+ variables:
+    int dimensions;
+        dimensions: attribute=0 ; // this will cause an error
+        dimensions : attribute=0 ; // this is ok.
+	...
+ }
+.fi
+.RE
+.LP
+The optional \fBdata:\fP section of a CDL specification is where
+netCDF variables may be initialized.  The syntax of an initialization
+is simple: a variable name, an equals sign, and a
+comma-delimited list of constants (possibly separated by spaces, tabs
+and newlines) terminated with a semicolon.  For multi-dimensional
+arrays, the last dimension varies fastest.  Thus row-order rather than
+column order is used for matrices.  If fewer values are supplied than
+are needed to fill a variable, it is extended with a type-dependent
+`fill value', which can be overridden by supplying a value for a
+distinguished variable attribute named `_FillValue'.  The
+types of constants need not match the type declared for a variable;
+coercions are done to convert integers to floating point, for example.
+The constant `_' can be used to designate the fill value for a variable.
+If the type of the variable is explicitly `string', then the special
+constant `NIL` can be used to represent a nil string, which is not the
+same as a zero length string.
+.SS "Primitive Data Types"
+.LP
+.RS
+.nf
+\fBchar\fP	characters
+\fBbyte\fP	8-bit data
+\fBshort\fP	16-bit signed integers
+\fBint\fP	32-bit signed integers
+\fBlong\fP	(synonymous with \fBint\fP)
+\fBint64\fP	64-bit signed integers
+\fBfloat\fP	IEEE single precision floating point (32 bits)
+\fBreal\fP	(synonymous with \fBfloat\fP)
+\fBdouble\fP	IEEE double precision floating point (64 bits)
+\fBubyte\fP	unsigned 8-bit data
+\fBushort\fP	16-bit unsigned integers
+\fBuint\fP	32-bit unsigned integers
+\fBuint64\fP	64-bit unsigned integers
+\fBstring\fP	arbitrary length strings
+.fi
+.RE
+.LP
+CDL supports a superset of the primitive data types of C.
+The names for the primitive data types are reserved words in CDL,
+so the names of variables, dimensions, and attributes must not be
+primitive type names.  In declarations, type names may be specified
+in either upper or lower case.
+.LP
+Bytes are intended to hold a full eight
+bits of data, and the zero byte has no special significance, as it
+mays for character data.
+\fBncgen\fP converts \fBbyte\fP declarations to \fBchar\fP
+declarations in the output C code and to the nonstandard \fBBYTE\fP
+declaration in output Fortran code.
+.LP
+Shorts can hold values between \-32768 and 32767.
+\fBncgen\fP converts \fBshort\fP declarations to \fBshort\fP
+declarations in the output C code and to the nonstandard \fBINTEGER*2\fP
+declaration in output Fortran code.
+.LP
+Ints can hold values between \-2147483648 and 2147483647.
+\fBncgen\fP converts \fBint\fP declarations to \fBint\fP
+declarations in the output C code and to \fBINTEGER\fP
+declarations in output Fortran code.  \fBlong\fP
+is accepted as a synonym for \fBint\fP in CDL declarations, but is
+deprecated since there are now platforms with 64-bit representations
+for C longs.
+.LP
+Int64 can hold values between \-9223372036854775808
+and 9223372036854775807.
+\fBncgen\fP converts \fBint64\fP declarations to \fBlonglong\fP
+declarations in the output C code.
+.\" and to \fBINTEGER\fP declarations in output Fortran code.
+.LP
+Floats can hold values between about \-3.4+38 and 3.4+38.  Their
+external representation is as 32-bit IEEE normalized single-precision
+floating point numbers.  \fBncgen\fP converts \fBfloat\fP
+declarations to \fBfloat\fP declarations in the output C code and to
+\fBREAL\fP declarations in output Fortran code.  \fBreal\fP is accepted
+as a synonym for \fBfloat\fP in CDL declarations.
+.LP
+Doubles can hold values between about \-1.7+308 and 1.7+308.  Their
+external representation is as 64-bit IEEE standard normalized
+double-precision floating point numbers.  \fBncgen\fP converts
+\fBdouble\fP declarations to \fBdouble\fP declarations in the output C
+code and to \fBDOUBLE PRECISION\fP declarations in output Fortran
+code.
+.LP
+The unsigned counterparts of the above integer types
+are mapped to the corresponding unsigned C types.
+Their ranges are suitably modified to start at zero.
+.LP
+The technical interpretation of the char type is that it is an unsigned
+8-bit value. The encoding of the 256 possible values
+is unspecified by default. A variable of char type
+may be marked with an "_Encoding" attribute to indicate
+the character set to be used: US-ASCII, ISO-8859-1, etc.
+Note that specifying the encoding of UTF-8 is equivalent to
+specifying US-ASCII
+This is because multi-byte UTF-8 characters cannot
+be stored in an 8-bit character. The only legal
+single byte UTF-8 values are by definition
+the 7-bit US-ASCII encoding with the top bit set to zero.
+.LP
+Strings are assumed by default to be encoded using UTF-8.
+Note that this means that multi-byte UTF-8 encodings may
+be present in the string, so it is possible that the number
+of distinct UTF-8 characters in a string is smaller than
+the number of 8-bit bytes used to store the string.
+.LP
+.SS "CDL Constants"
+.LP
+Constants assigned to attributes or variables may be of any of the
+basic netCDF types.  The syntax for constants is similar to C syntax,
+except that type suffixes must be appended to shorts and floats to
+distinguish them from longs and doubles.
+.LP
+A \fIbyte\fP constant is represented by
+an integer constant with a `b' (or
+`B') appended.  In the old netCDF-2 API, byte constants could also be
+represented using single characters or standard C character escape
+sequences such as `a' or `\n'.  This is still supported for backward
+compatibility, but deprecated to make the distinction clear between
+the numeric byte type and the textual char type.  Example byte
+constants include:
+.RS
+.nf
+ 0b             // a zero byte
+ \-1b            // \-1 as an 8-bit byte
+ 255b           // also \-1 as a signed 8-bit byte
+.fi
+.RE
+.LP
+\fIshort\fP integer constants are intended for representing 16-bit
+signed quantities.  The form of a \fIshort\fP constant is an integer
+constant with an `s' or `S' appended.  If a \fIshort\fP constant
+begins with `0', it is interpreted as octal, except that if it begins with
+`0x', it is interpreted as a hexadecimal constant.  For example:
+.RS
+.nf
+\-2s	// a short \-2
+0123s	// octal
+0x7ffs  //hexadecimal
+.fi
+.RE
+.LP
+\fIint\fP integer constants are intended for representing 32-bit signed
+quantities.  The form of an \fIint\fP constant is an ordinary integer
+constant, although it is acceptable to optionally append a single `l' or
+`L' (again, deprecated). Be careful, though, the L suffix is interpreted
+as a 32 bit integer, and never as a 64 bit integer. This can be confusing
+since the C long type can ambigously be either 32 bit or 64 bit.
+.LP
+If an \fIint\fP constant begins with `0', it is interpreted as
+octal, except that if it begins with `0x', it is interpreted as a hexadecimal
+constant (but see opaque constants below).
+Examples of valid \fIint\fP constants include:
+.RS
+.nf
+\-2
+1234567890L
+0123		// octal
+0x7ff		// hexadecimal
+.fi
+.RE
+.LP
+\fIint64\fP integer constants are intended for representing 64-bit
+signed quantities.  The form of an \fIint64\fP constant is an integer
+constant with an `ll' or `LL' appended.  If an \fIint64\fP constant
+begins with `0', it is interpreted as octal, except that if it begins with
+`0x', it is interpreted as a hexadecimal constant.  For example:
+.RS
+.nf
+\-2ll	// an unsigned \-2
+0123LL	// octal
+0x7ffLL  //hexadecimal
+.fi
+.RE
+.LP
+Floating point constants of type \fIfloat\fP are appropriate for representing
+floating point data with about seven significant digits of precision.
+The form of a \fIfloat\fP constant is the same as a C floating point
+constant with an `f' or `F' appended.  For example the following
+are all acceptable \fIfloat\fP constants:
+.RS
+.nf
+\-2.0f
+3.14159265358979f	// will be truncated to less precision
+1.f
+
+.fi
+.RE
+.LP
+Floating point constants of type \fIdouble\fP are appropriate for
+representing floating point data with about sixteen significant digits
+of precision.  The form of a \fIdouble\fP constant is the same as a C
+floating point constant.  An optional `d' or `D' may be appended.
+For example the following are all acceptable \fIdouble\fP constants:
+.RS
+.nf
+\-2.0
+3.141592653589793
+1.0e-20
+1.d
+.fi
+.RE
+.LP
+Unsigned integer constants can be created by appending
+the character 'U' or 'u' between the constant and any trailing
+size specifier, or immediately at the end of the size specifier.
+Thus one could say
+10U, 100su, 100000ul, or 1000000llu, for example.
+.LP
+Single character constants may be enclosed in single quotes.
+If a sequence of one or more characters is enclosed
+in double quotes, then its interpretation must be inferred
+from the context. If the dataset is created using the netCDF
+classic model, then all such constants are interpreted
+as a character array, so each character in the constant
+is interpreted as if it were a single character.
+If the dataset is netCDF extended, then the constant may
+be interpreted as for the classic model or as a true string
+(see below) depending on the type of the attribute or variable
+into which the string is contained.
+.LP
+The interpretation of char constants is that those
+that are in the printable ASCII range (' '..'~') are assumed to
+be encoded as the 1-byte subset ofUTF-8, which is equivalent to US-ASCII.
+In all cases, the usual C string escape conventions are honored
+for values from 0 thru 127. Values greater than 127 are allowed,
+but their encoding is undefined.
+For netCDF extended, the use of the char type is deprecated
+in favor of the string type.
+.LP
+Some character constant examples are as follows.
+.RS
+.nf
+ 'a'		// ASCII `a'
+ "a"		// equivalent to 'a'
+ "Two\\nlines\\n"	// a 10-character string with two embedded newlines
+ "a bell:\\007"	// a string containing an ASCII bell
+.fi
+.RE
+Note that the netCDF character array "a" would fit in a one-element
+variable, since no terminating NULL character is assumed.  However, a zero
+byte in a character array is interpreted as the end of the significant
+characters by the \fBncdump\fP program, following the C convention.
+Therefore, a NULL byte should not be embedded in a character string unless
+at the end: use the \fIbyte\fP data type instead for byte arrays that
+contain the zero byte.
+.LP
+\fIString\fP constants are, like character constants,
+represented using double quotes. This represents a potential
+ambiguity since a multi-character string may also indicate
+a dimensioned character value. Disambiguation usually occurs
+by context, but care should be taken to specify the\fIstring\fP
+type to ensure the proper choice.
+String constants are assumed to always be UTF-8 encoded. This
+specifically means that the string constant may actually
+contain multi-byte UTF-8 characters.
+The special constant `NIL` can be used to represent a nil string, which is not the
+same as a zero length string.
+.LP
+\fIOpaque\fP constants are represented as
+sequences of hexadecimal digits preceded by 0X or 0x: 0xaa34ffff,
+for example.
+These constants can still be used as integer constants
+and will be either truncated or extended as necessary.
+.SS "Compound Constant Expressions"
+.LP
+In order to assign values to variables (or attributes)
+whose type is user-defined type, the constant notation has been
+extended to include sequences of constants enclosed in curly
+brackets (e.g. "{"..."}").
+Such a constant is called a compound constant, and compound constants
+can be nested.
+.LP
+Given a type "T(*) vlen_t", where T is some other arbitrary base type,
+constants for this should be specified as follows.
+.nf
+    vlen_t var[2] = {t11,t12,...t1N}, {t21,t22,...t2m};
+.fi
+The values tij, are assumed to be constants of type T.
+.LP
+Given a type "compound cmpd_t {T1 f1; T2 f2...Tn fn}",
+where the Ti are other arbitrary base types,
+constants for this should be specified as follows.
+.nf
+    cmpd_t var[2] = {t11,t12,...t1N}, {t21,t22,...t2n};
+.fi
+The values tij, are assumed to be constants of type Ti.
+If the fields are missing, then they will be set using any
+specified or default fill value for the field's base type.
+.LP
+The general set of rules for using braces are defined in the
+.B Specifying
+.B Datalists
+section below.
+.LP
+.SS "Scoping Rules"
+.LP
+With the addition of groups, the name space for defined objects
+is no longer flat. References (names)
+of any type, dimension, or variable may be prefixed
+with the absolute path specifying a specific declaration.
+Thus one might say
+.nf
+    variables:
+        /g1/g2/t1 v1;
+.fi
+The type being referenced (t1) is the one within group g2, which in
+turn is nested in group g1.
+The similarity of this notation to Unix file paths is deliberate,
+and one can consider groups as a form of directory structure.
+.LP
+When name is not prefixed, then scope rules are applied to locate the
+specified declaration. Currently, there are three rules: one for dimensions,
+one for types and enumeration constants, and one for all others.
+.HP
+When an unprefixed name of a dimension is used (as in a
+variable declaration), ncgen first looks in the immediately
+enclosing group for the dimension.  If it is not found
+there, then it looks in the group enclosing this group.
+This continues up the group hierarchy until the dimension is
+found, or there are no more groups to search.
+.HP
+2. When an unprefixed name of a type or an enumeration constant
+is used, ncgen searches the group tree using a pre-order depth-first
+search. This essentially means that it will find the matching declaration
+that precedes the reference textually in the cdl file and that
+is "highest" in the group hierarchy.
+.HP
+3. For all other names, only the immediately enclosing group is searched.
+.LP
+One final note. Forward references are not allowed.
+This means that specifying, for example,
+/g1/g2/t1 will fail if this reference occurs before g1 and/or g2 are defined.
+.SS "Specifying Enumeration Constants"
+.LP
+References to Enumeration constants (in data lists) can be ambiguous
+since the same enumeration constant name can be defined in more than
+one enumeration. If a cdl file specified an ambiguous constant,
+then ncgen will signal an error. Such constants can be disambiguated
+in two ways.
+.IP "\fB1.\fP"
+Prefix the enumeration constant with the name of the enumeration separated
+by a dot: \fIenum.econst\fP, for example.
+.IP "\fB2.\fP"
+If case one is not sufficient to disambiguate the enumeration constant,
+then one must specify the precise enumeration type using
+a group path: \fI/g1/g2/enum.econst\fP, for example.
+.SS "Special Attributes"
+.LP
+Special, virtual, attributes can be specified to provide
+performance-related information about the file format and
+about variable properties.
+The file must be a netCDF-4 file for these to take effect.
+.LP
+These special virtual attributes are not actually part of the file,
+they are merely a convenient way to set miscellaneous
+properties of the data in CDL
+.LP
+The special attributes currently supported are as follows:
+`_Format',
+`_Fletcher32,
+`_ChunkSizes',
+`_Endianness',
+`_DeflateLevel',
+`_Shuffle', and
+`_Storage'.
+.LP
+`_Format' is a global attribute specifying the netCDF format
+variant. Its value must be a single string
+matching one of `classic', `64-bit offset', `64-bit data', `netCDF-4', or
+`netCDF-4 classic model'.
+.LP
+The rest of the special attributes are all variable attributes.
+Essentially all of then map to some corresponding `nc_def_var_XXX'
+function as defined in the netCDF-4 API.
+For the attributes that are essentially boolean (_Fletcher32, _Shuffle,
+and _NOFILL), the value true can be specified by using the strings
+`true' or `1', or by using the integer 1.
+The value false expects either `false', `0', or the integer 0.
+The actions associated with these attributes are as follows.
+.IP 1. 3
+`_Fletcher32 sets the `fletcher32' property for a variable.
+.IP 2. 3
+`_Endianness' is either `little' or `big', depending on
+how the variable is stored when first written.
+.IP 3. 3
+`_DeflateLevel' is an
+integer between 0 and 9 inclusive if compression has been specified
+for the variable.
+.IP 4. 3
+`_Shuffle' specifies if the the shuffle filter should be used.
+.IP 5. 3
+`_Storage' is `contiguous' or `chunked'.
+.IP 6. 3
+`_ChunkSizes' is a list of chunk sizes for each dimension of
+the variable
+.LP
+Note that attributes such as "add_offset" or "scale_factor"
+have no special meaning to ncgen.  These attributes are
+currently conventions, handled above the library layer by
+other utility packages, for example NCO.
+.LP
+.SS "Specifying Datalists"
+.LP
+Specifying datalists for variables in the `data:` section can be somewhat
+complicated. There are some rules that must be followed
+to ensure that datalists are parsed correctly by ncgen.
+.LP
+First, the top level is automatically assumed to be a list of items, so it should not be inside {...}.
+That means that if the variable is a scalar, there will be a single top-level element
+and if the variable is an array, there will be N top-level elements.
+For each element of the top level list, the following rules should be applied.
+.IP 1. 3
+Instances of UNLIMITED dimensions (other than the first dimension) must be surrounded by {...} in order to specify the size.
+.IP 2. 3
+Compound instances must be embedded in {...}
+.IP 3. 3
+Non-scalar fields of compound instances must be embedded in {...}.
+.IP 4. 3
+Instances of vlens must be surrounded by {...} in order to specify the size.
+.LP
+Datalists associated with attributes are implicitly a vector (i.e., a list) of values of the type of the attribute and the above rules must apply with that in mind.
+.IP 7. 3
+No other use of braces is allowed.
+.LP
+Note that one consequence of these rules is that
+arrays of values cannot have subarrays within braces.
+Consider, for example, int var(d1)(d2)...(dn),
+where none of d2...dn are unlimited.
+A datalist for this variable must be a single list of integers,
+where the number of integers is no more than D=d1*d2*...dn values;
+note that the list can be less than D, in which case fill values
+will be used to pad the list.
+.LP
+Rule 6 about attribute datalist has the following consequence.
+If the type of the attribute is a compound (or vlen) type, and if
+the number of entries in the list is one, then the compound instances
+must be enclosed in braces.
+.LP
+.SS "Specifying Character Datalists"
+.LP
+Specifying datalists for variables of type char also has some
+complications. consider, for example
+.RS
+.nf
+dimensions: u=UNLIMITED; d1=1; d2=2; d3=3;
+            d4=4; d5=5; u2=UNLIMITED;
+variables: char var(d4,d5);
+datalist: var="1", "two", "three";
+.fi
+.RE
+.LP
+We have twenty elements of var to fill (d5 X d4)
+and we have three strings of length 1, 3, 5.
+How do we assign the characters in the strings to the
+twenty elements?
+.LP
+This is challenging because it is desirable to mimic
+the original ncgen (ncgen3).
+The core algorithm is notionally as follows.
+.IP 1. 3
+Assume we have a set of dimensions D1..Dn,
+where D1 may optionally be an Unlimited dimension.
+It is assumed that the sizes of the Di are all known
+(including unlimited dimensions).
+.IP 2. 3
+Given a sequence of string or character constants
+C1..Cm, our goal is to construct a single string
+whose length is the cross product of D1 thru Dn.
+Note that for purposes of this algorithm, character constants
+are treated as strings of size 1.
+.IP 3. 3
+Construct Dx = cross product of D1 thru D(n-1).
+.IP 4. 3
+For each constant Ci, add fill characters as needed
+so that its length is a multiple of Dn.
+.IP 5. 3
+Concatenate the modified C1..Cm to produce string S.
+.IP 6. 3
+Add fill characters to S to make its length be a multiple of Dn.
+.IP 8. 3
+If S is longer than the Dx * Dn, then truncate
+and generate a warning.
+.LP
+There are three other cases of note.
+.IP 1. 3
+If there is only a single, unlimited dimension,
+then all of the constants are concatenated
+and fill characters are added to the
+end of the resulting string to make its
+length be that of the unlimited dimension.
+If the length is larger than
+the unlimited dimension, then it is truncated
+with a warning.
+.IP 2. 3
+For the case of  character typed vlen, "char(*) vlen_t" for example.
+we simply concatenate all the constants with no filling at all.
+.IP 3. 3
+For the case of a character typed attribute,
+we simply concatenate all the constants.
+.LP
+In netcdf-4, dimensions other than the first can be unlimited.
+Of course by the rules above, the interior unlimited instances
+must be delimited by {...}. For example.
+.in +5
+.nf
+variables: char var(u,u2);
+datalist: var={"1", "two"}, {"three"};
+.fi
+.in -5
+In this case u will have the effective length of two.
+Within each instance of u2, the rules above will apply, leading
+to this.
+.in +5
+datalist: var={"1","t","w","o"}, {"t","h","r","e","e"};
+.in -5
+The effective size of u2 will be the max of the two instance lengths
+(five in this case)
+and the shorter will be padded to produce this.
+.in +5
+datalist: var={"1","t","w","o","\\0"}, {"t","h","r","e","e"};
+.in -5
+.LP
+Consider an even more complicated case.
+.in +5
+.nf
+variables: char var(u,u2,u3);
+datalist: var={{"1", "two"}}, {{"three"},{"four","xy"}};
+.fi
+.in -5
+In this case u again will have the effective length of two.
+The u2 dimensions will have a size = max(1,2) = 2;
+Within each instance of u2, the rules above will apply, leading to this.
+.in +5
+.nf
+datalist: var={{"1","t","w","o"}}, {{"t","h","r","e","e"},{"f","o","u","r","x","y"}};
+.fi
+.in -5
+The  effective  size  of u3 will be the max of the two instance lengths
+(six in this case) and the shorter ones will be padded to produce this.
+.in +5
+.nf
+datalist: var={{"1","t","w","o","\0","\0"}}, {{"t","h","r","e","e","\0"},{"f","o","u","r","x","y"}};
+.fi
+.in -5
+Note however that the first instance of u2 is less than the max length
+of u2, so we need to add a filler for another instance of u2, producing this.
+.in +5
+.nf
+datalist: var={{"1","t","w","o","\0","\0"},{"\0","\0","\0","\0","\0","\0"}}, {{"t","h","r","e","e","\0"},{"f","o","u","r","x","y"}};
+.fi
+.in -5
+
+.SH BUGS
+.LP
+The programs generated by \fBncgen\fP when using the \fB-c\fP flag
+use initialization statements to store data in variables, and will fail to
+produce compilable programs if you try to use them for large datasets, since
+the resulting statements may exceed the line length or number of
+continuation statements permitted by the compiler.
+.LP
+The CDL syntax makes it easy to assign what looks like an array of
+variable-length strings to a netCDF variable, but the strings may simply be
+concatenated into a single array of characters.
+Specific use of the \fIstring\fP type specifier may solve the problem
+
+.SH "CDL Grammar"
+.LP
+The file ncgen.y is the definitive grammar for CDL, but a stripped
+down version is included here for completeness.
+.RS
+.nf
+ncdesc: NETCDF
+	datasetid
+        rootgroup
+        ;
+
+datasetid: DATASETID
+
+rootgroup: '{'
+           groupbody
+           subgrouplist
+           '}';
+
+groupbody:
+		attrdecllist
+                typesection
+                dimsection
+                vasection
+                datasection
+                ;
+
+subgrouplist:
+	  /*empty*/
+	| subgrouplist namedgroup
+	;
+
+namedgroup: GROUP ident '{'
+            groupbody
+            subgrouplist
+            '}'
+	    attrdecllist
+	    ;
+
+typesection:    /* empty */
+                | TYPES
+		| TYPES typedecls
+                ;
+
+typedecls:
+	  type_or_attr_decl
+	| typedecls type_or_attr_decl
+	;
+
+typename: ident ;
+
+type_or_attr_decl:
+	  typedecl
+	| attrdecl ';'
+	;
+
+typedecl:
+	  enumdecl optsemicolon
+	| compounddecl optsemicolon
+	| vlendecl optsemicolon
+	| opaquedecl optsemicolon
+	;
+
+optsemicolon:
+	  /*empty*/
+	| ';'
+	;
+
+enumdecl: primtype ENUM typename ;
+
+enumidlist:   enumid
+	    | enumidlist ',' enumid
+	    ;
+
+enumid: ident '=' constint ;
+
+opaquedecl: OPAQUE '(' INT_CONST ')' typename ;
+
+vlendecl: typeref '(' '*' ')' typename ;
+
+compounddecl: COMPOUND typename '{' fields '}' ;
+
+fields:   field ';'
+	| fields field ';'
+	;
+
+field: typeref fieldlist ;
+
+primtype:         CHAR_K
+                | BYTE_K
+                | SHORT_K
+                | INT_K
+                | FLOAT_K
+                | DOUBLE_K
+                | UBYTE_K
+                | USHORT_K
+                | UINT_K
+                | INT64_K
+                | UINT64_K
+                ;
+
+dimsection:     /* empty */
+                | DIMENSIONS
+		| DIMENSIONS dimdecls
+                ;
+
+dimdecls:       dim_or_attr_decl ';'
+                | dimdecls dim_or_attr_decl ';'
+                ;
+
+dim_or_attr_decl: dimdeclist  | attrdecl  ;
+
+dimdeclist:     dimdecl
+                | dimdeclist ',' dimdecl
+                ;
+
+dimdecl:
+	  dimd '=' UINT_CONST
+	| dimd '=' INT_CONST
+        | dimd '=' DOUBLE_CONST
+        | dimd '=' NC_UNLIMITED_K
+        ;
+
+dimd:           ident ;
+
+vasection:      /* empty */
+                | VARIABLES
+                | VARIABLES vadecls
+                ;
+
+vadecls:        vadecl_or_attr ';'
+                | vadecls vadecl_or_attr ';'
+                ;
+
+vadecl_or_attr: vardecl  | attrdecl  ;
+
+vardecl:        typeref varlist ;
+
+varlist:      varspec
+            | varlist ',' varspec
+            ;
+
+varspec:        ident dimspec ;
+
+dimspec:        /* empty */
+                | '(' dimlist ')'
+                ;
+
+dimlist:        dimref
+                | dimlist ',' dimref
+                ;
+
+dimref: path ;
+
+fieldlist:
+	  fieldspec
+	| fieldlist ',' fieldspec
+        ;
+
+fieldspec: ident fielddimspec ;
+
+fielddimspec:     /* empty */
+                | '(' fielddimlist ')'
+                ;
+
+fielddimlist:
+	  fielddim
+	| fielddimlist ',' fielddim
+        ;
+
+fielddim:
+	  UINT_CONST
+	| INT_CONST
+	;
+
+/* Use this when referencing defined objects */
+varref: type_var_ref ;
+
+typeref: type_var_ref	   ;
+
+type_var_ref:
+    	  path
+	| primtype
+	;
+
+/* Use this for all attribute decls */
+/* Watch out; this is left recursive */
+attrdecllist: /*empty*/  | attrdecl ';' attrdecllist  ;
+
+attrdecl:
+	  ':' ident '=' datalist
+	| typeref type_var_ref ':' ident '=' datalist
+	| type_var_ref ':' ident '=' datalist
+	| type_var_ref ':' _FILLVALUE '=' datalist
+	| typeref type_var_ref ':' _FILLVALUE '=' datalist
+	| type_var_ref ':' _STORAGE '=' conststring
+	| type_var_ref ':' _CHUNKSIZES '=' intlist
+	| type_var_ref ':' _FLETCHER32 '=' constbool
+	| type_var_ref ':' _DEFLATELEVEL '=' constint
+	| type_var_ref ':' _SHUFFLE '=' constbool
+	| type_var_ref ':' _ENDIANNESS '=' conststring
+	| type_var_ref ':' _NOFILL '=' constbool
+	| ':' _FORMAT '=' conststring
+	;
+
+path:
+	  ident
+	| PATH
+	;
+
+datasection:    /* empty */
+                | DATA
+                | DATA datadecls
+                ;
+
+datadecls:
+	  datadecl ';'
+	| datadecls datadecl ';'
+	;
+
+datadecl: varref '=' datalist ;
+datalist:
+	  datalist0
+	| datalist1
+	;
+
+datalist0:
+	/*empty*/
+	;
+
+/* Must have at least 1 element */
+datalist1:
+	  dataitem
+	| datalist ',' dataitem
+	;
+
+dataitem:
+	  constdata
+	| '{' datalist '}'
+	;
+
+constdata:
+	  simpleconstant
+	| OPAQUESTRING
+	| FILLMARKER
+	| NIL
+	| econstref
+	| function
+	;
+
+econstref: path ;
+
+function: ident '(' arglist ')' ;
+
+arglist:
+	  simpleconstant
+	| arglist ',' simpleconstant
+	;
+
+simpleconstant:
+	  CHAR_CONST /* never used apparently*/
+	| BYTE_CONST
+	| SHORT_CONST
+	| INT_CONST
+	| INT64_CONST
+	| UBYTE_CONST
+	| USHORT_CONST
+	| UINT_CONST
+	| UINT64_CONST
+	| FLOAT_CONST
+	| DOUBLE_CONST
+	| TERMSTRING
+	;
+
+intlist:
+	  constint
+	| intlist ',' constint
+	;
+
+constint:
+	  INT_CONST
+	| UINT_CONST
+	| INT64_CONST
+	| UINT64_CONST
+	;
+
+conststring: TERMSTRING ;
+
+constbool:
+	  conststring
+	| constint
+	;
+
+/* Push all idents thru here for tracking */
+ident: IDENT ;
+.fi
+.RE
diff --git a/privatemodules/nc4/share/man/man1/ncgen3.1 b/privatemodules/nc4/share/man/man1/ncgen3.1
new file mode 100644
index 0000000000000000000000000000000000000000..fe36727489dbd865ce685d74c89011a4749a1f3e
--- /dev/null
+++ b/privatemodules/nc4/share/man/man1/ncgen3.1
@@ -0,0 +1,373 @@
+.\" $Header: /upc/share/CVS/netcdf-3/ncgen3/ncgen3.1,v 1.1 2009/09/24 18:19:10 dmh Exp $
+.TH NCGEN3 1 "$Date: 2009/09/24 18:19:10 $" "Printed: \n(yr-\n(mo-\n(dy" "UNIDATA UTILITIES"
+.SH NAME
+ncgen3 \- From a CDL file generate a netCDF classic or 64 bit classicfile,
+a C program, or a Fortran program
+.SH SYNOPSIS
+.HP
+ncgen3
+.nh
+\%[\-b]
+\%[\-c]
+\%[\-f]
+\%[\-k \fIkind_of_file\fP]
+\%[\-x]
+\%[\-n]
+\%[\-o \fInetcdf_filename\fP]
+\%\fIinput_file\fP
+.hy
+.ft
+.SH DESCRIPTION
+\fBncgen3\fP generates either a netCDF file, or C or Fortran source code to
+create a netCDF file.  The input to \fBncgen3\fP is a description of a netCDF
+file in a small language known as CDL (network Common Data form Language),
+described below.
+If no options are specified in invoking \fBncgen3\fP, it merely checks the
+syntax of the input CDL file, producing error messages for
+any violations of CDL syntax.  Other options can be used to create the
+corresponding netCDF file, to generate a C program that uses the netCDF C
+interface to create the netCDF file, or to generate a Fortran program that
+uses the netCDF Fortran interface to create the same netCDF file.
+.LP
+\fBncgen3\fP may be used with the companion program \fBncdump\fP to perform
+some simple operations on netCDF files.  For example, to rename a dimension
+in a netCDF file, use \fBncdump\fP to get a CDL version of the netCDF file,
+edit the CDL file to change the name of the dimensions, and use \fBncgen3\fP
+to generate the corresponding netCDF file from the edited CDL file.
+.SH OPTIONS
+.IP "\fB-b\fP"
+Create a (binary) netCDF file.  If the \fB-o\fP option is absent, a default
+file name will be constructed from the netCDF name (specified after the
+\fBnetcdf\fP keyword in the input) by appending the `.nc' extension.  If a
+file already exists with the specified name, it will be overwritten.
+.IP "\fB-c\fP"
+Generate
+.B C
+source code that will create a netCDF file
+matching the netCDF specification.  The C source code is written to
+standard output.
+.IP "\fB-f\fP"
+Generate
+.B Fortran
+source code that will create a netCDF file
+matching the netCDF specification.  The Fortran source code is written
+to standard output.
+.IP "\fB-o\fP \fRnetcdf_file\fP"
+Name for the binary netCDF file created.  If this option is specified, it implies
+the "\fB-b\fP" option.  (This option is necessary because netCDF files
+cannot be written directly to standard output, since standard output is not
+seekable.)
+.IP "\fB-k \fRkind_of_file\fP"
+Using \-k2 or \-k "64-bit offset" specifies that
+generated file (or program) should use version 2 of format that
+employs 64-bit file offsets.  The default is to use version 1
+("classic") format with 32-bit file offsets, although this limits the
+size of the netCDF file, variables, and records to the sizes supported
+by the classic format.  (NetCDF-4 will support additional kinds of
+netCDF files, "netCDF-4" and "netCDF-4 classic model".)
+Note: \-v is also accepted to mean the same thing as
+\-k for backward compatibility, but \-k is preferred, to match
+the corresponding ncdump option. 
+.IP "\fB-x\fP"
+Don't initialize data with fill values.  This can speed up creation of
+large netCDF files greatly, but later attempts to read unwritten data
+from the generated file will not be easily detectable.
+.SH EXAMPLES
+.LP
+Check the syntax of the CDL file `\fBfoo.cdl\fP':
+.RS
+.HP
+ncgen3 foo.cdl
+.RE
+.LP
+From the CDL file `\fBfoo.cdl\fP', generate an equivalent binary netCDF file
+named `\fBx.nc\fP':
+.RS
+.HP
+ncgen3 \-o x.nc foo.cdl
+.RE
+.LP
+From the CDL file `\fBfoo.cdl\fP', generate a C program containing the
+netCDF function invocations necessary to create an equivalent binary netCDF
+file named `\fBx.nc\fP':
+.RS
+.HP
+ncgen3 \-c \-o x.nc foo.cdl
+.RE
+.LP
+.SH USAGE
+.SS "CDL Syntax Summary"
+.LP
+Below is an example of CDL syntax, describing a netCDF file with several
+named dimensions (lat, lon, and time), variables (Z, t, p, rh, lat, lon,
+time), variable attributes (units, long_name, valid_range, _FillValue), and
+some data.  CDL keywords are in boldface.  (This example is intended to
+illustrate the syntax; a real CDL file would have a more complete set of
+attributes so that the data would be more completely self-describing.)
+
+.RS
+.nf
+\fBnetcdf\fP foo {  // an example netCDF specification in CDL
+
+\fBdimensions\fP:
+	lat = 10, lon = 5, time = \fBunlimited\fP ;
+
+\fBvariables\fP:
+	\fBlong\fP    lat(lat), lon(lon), time(time);
+	\fBfloat\fP   Z(time,lat,lon), t(time,lat,lon);
+	\fBdouble\fP  p(time,lat,lon);
+	\fBlong\fP    rh(time,lat,lon);
+
+	// variable attributes
+	lat:long_name = "latitude";
+	lat:units = "degrees_north";
+	lon:long_name = "longitude";
+	lon:units = "degrees_east";
+	time:units = "seconds since 1992-1-1 00:00:00";
+	Z:units = "geopotential meters";
+	Z:valid_range = 0., 5000.;
+	p:_FillValue = \-9999.;
+	rh:_FillValue = \-1;
+
+\fBdata\fP:
+	lat   = 0, 10, 20, 30, 40, 50, 60, 70, 80, 90;
+	lon   = \-140, \-118, \-96, \-84, \-52;
+}
+.fi
+.RE
+.LP
+All CDL statements are terminated by a semicolon.  Spaces, tabs,
+and newlines can be used freely for readability.
+Comments may follow the characters `//' on any line.
+.LP
+A CDL description consists of three optional parts: \fIdimensions\fP,
+\fIvariables\fP, and \fIdata\fP, beginning with the keyword
+.BR dimensions: ,
+.BR variables: ,
+and
+.BR data ,
+respectively.
+The variable part may contain \fIvariable
+declarations\fP and \fIattribute assignments\fP.
+.LP
+A netCDF \fIdimension\fP is used to define the shape of one or more of the
+multidimensional variables contained in the netCDF file.  A netCDF
+dimension has a name and a size.  At most one dimension in a netCDF file
+can have the \fBunlimited\fP size, which means a variable using this
+dimension can grow to any length (like a record number in a file).
+.LP
+A \fIvariable\fP represents a multidimensional array of values of the
+same type.  A variable has a name, a data type, and a shape described
+by its list of dimensions.  Each variable may also have associated
+\fIattributes\fP (see below) as well as data values.  The name, data
+type, and shape of a variable are specified by its declaration in the
+\fIvariable\fP section of a CDL description.  A variable may have the same
+name as a dimension; by convention such a variable is one-dimensional
+and contains coordinates of the dimension it names.  Dimensions need
+not have corresponding variables.
+.LP
+A netCDF \fIattribute\fP contains information about a netCDF variable or
+about the whole netCDF dataset.  Attributes are used
+to specify such properties as units, special values, maximum and
+minimum valid values, scaling factors, offsets, and parameters.  Attribute
+information is represented by single values or arrays of values.  For
+example, "units" is an attribute represented by a character array such
+as "celsius".  An attribute has an associated variable, a name,
+a data type, a length, and a value.  In contrast to variables that are
+intended for data, attributes are intended for metadata (data about
+data).
+.LP
+In CDL, an attribute is designated by a variable and attribute name,
+separated by `:'.  It is possible to assign \fIglobal\fP attributes
+not associated with any variable to the netCDF as a whole by using
+`:' before the attribute name.  The data type of an attribute in CDL
+is derived from the type of the value assigned to it.  The length of
+an attribute is the number of data values assigned to it, or the
+number of characters in the character string assigned to it.  Multiple
+values are assigned to non-character attributes by separating the
+values with commas.  All values assigned to an attribute must be of
+the same type.
+.LP
+The names for CDL dimensions, variables, and attributes must begin with an
+alphabetic character or `_', and subsequent characters may be alphanumeric
+or `_' or `-'.
+.LP
+The optional \fIdata\fP section of a CDL specification is where
+netCDF variables may be initialized.  The syntax of an initialization
+is simple: a variable name, an equals sign, and a
+comma-delimited list of constants (possibly separated by spaces, tabs
+and newlines) terminated with a semicolon.  For multi-dimensional
+arrays, the last dimension varies fastest.  Thus row-order rather than
+column order is used for matrices.  If fewer values are supplied than
+are needed to fill a variable, it is extended with a type-dependent
+`fill value', which can be overridden by supplying a value for a
+distinguished variable attribute named `_FillValue'.  The
+types of constants need not match the type declared for a variable;
+coercions are done to convert integers to floating point, for example.
+The constant `_' can be used to designate the fill value for a variable.
+.SS "Primitive Data Types"
+.LP
+.RS
+.nf
+\fBchar\fP	characters
+\fBbyte\fP	8-bit data
+\fBshort\fP	16-bit signed integers
+\fBlong\fP	32-bit signed integers
+\fBint\fP	(synonymous with \fBlong\fP)
+\fBfloat\fP	IEEE single precision floating point (32 bits)
+\fBreal\fP	(synonymous with \fBfloat\fP)
+\fBdouble\fP	IEEE double precision floating point (64 bits)
+.fi
+.RE
+.LP
+Except for the added data-type \fBbyte\fP and the lack of
+\fBunsigned\fP,
+CDL supports the same primitive data types as C.
+The names for the primitive data types are reserved words in CDL,
+so the names of variables, dimensions, and attributes must not be
+type names.  In declarations, type names may be specified
+in either upper or lower case.
+.LP
+Bytes differ from characters in that they are intended to hold a full eight
+bits of data, and the zero byte has no special significance, as it
+does for character data.
+\fBncgen3\fP converts \fBbyte\fP declarations to \fBchar\fP
+declarations in the output C code and to the nonstandard \fBBYTE\fP
+declaration in output Fortran code.
+.LP
+Shorts can hold values between \-32768 and 32767.
+\fBncgen3\fP converts \fBshort\fP declarations to \fBshort\fP
+declarations in the output C code and to the nonstandard \fBINTEGER*2\fP
+declaration in output Fortran code.
+.LP
+Longs can hold values between \-2147483648 and 2147483647.
+\fBncgen3\fP converts \fBlong\fP declarations to \fBlong\fP
+declarations in the output C code and to \fBINTEGER\fP
+declarations in output Fortran code.  \fBint\fP and \fBinteger\fP are
+accepted as synonyms for \fBlong\fP in CDL declarations.
+Now that there are platforms with 64-bit representations for C longs, it may
+be better to use the \fBint\fP synonym to avoid confusion.
+.LP
+Floats can hold values between about \-3.4+38 and 3.4+38.  Their
+external representation is as 32-bit IEEE normalized single-precision
+floating point numbers.  \fBncgen3\fP converts \fBfloat\fP
+declarations to \fBfloat\fP declarations in the output C code and to
+\fBREAL\fP declarations in output Fortran code.  \fBreal\fP is accepted
+as a synonym for \fBfloat\fP in CDL declarations.
+.LP
+Doubles can hold values between about \-1.7+308 and 1.7+308.  Their
+external representation is as 64-bit IEEE standard normalized
+double-precision floating point numbers.  \fBncgen3\fP converts
+\fBdouble\fP declarations to \fBdouble\fP declarations in the output C
+code and to \fBDOUBLE PRECISION\fP declarations in output Fortran
+code.
+.LP
+.SS "CDL Constants"
+.LP
+Constants assigned to attributes or variables may be of any of the
+basic netCDF types.  The syntax for constants is similar to C syntax,
+except that type suffixes must be appended to shorts and floats to
+distinguish them from longs and doubles.
+.LP
+A \fIbyte\fP constant is represented by a single character or multiple
+character escape sequence enclosed in single quotes.  For example,
+.RS
+.nf
+ 'a'		// ASCII `a'
+ '\\0'		// a zero byte
+ '\\n'		// ASCII newline character
+ '\\33'		// ASCII escape character (33 octal)
+ '\\x2b'	// ASCII plus (2b hex)
+ '\\377'	// 377 octal = 255 decimal, non-ASCII
+.fi
+.RE
+.LP
+Character constants are enclosed in double quotes.  A character array
+may be represented as a string enclosed in double quotes.  The usual C
+string escape conventions are honored.  For example
+.RS
+.nf
+"a"		// ASCII `a'
+"Two\\nlines\\n"	// a 10-character string with two embedded newlines
+"a bell:\\007"	// a string containing an ASCII bell
+.fi
+.RE
+Note that the netCDF character array "a" would fit in a one-element
+variable, since no terminating NULL character is assumed.  However, a zero
+byte in a character array is interpreted as the end of the significant
+characters by the \fBncdump\fP program, following the C convention.
+Therefore, a NULL byte should not be embedded in a character string unless
+at the end: use the \fIbyte\fP data type instead for byte arrays that
+contain the zero byte.  NetCDF and CDL have no string type, but only
+fixed-length character arrays, which may be multi-dimensional.
+.LP
+\fIshort\fP integer constants are intended for representing 16-bit
+signed quantities.  The form of a \fIshort\fP constant is an integer
+constant with an `s' or `S' appended.  If a \fIshort\fP constant
+begins with `0', it is interpreted as octal, except that if it begins with
+`0x', it is interpreted as a hexadecimal constant.  For example:
+.RS
+.nf
+\-2s	// a short \-2
+0123s	// octal
+0x7ffs  //hexadecimal
+.fi
+.RE
+.LP
+\fILong\fP integer constants are intended for representing 32-bit signed
+quantities.  The form of a \fIlong\fP constant is an ordinary integer
+constant, although it is acceptable to append an optional `l' or
+`L'.  If a \fIlong\fP constant begins with `0', it is interpreted as
+octal, except that if it begins with `0x', it is interpreted as a hexadecimal
+constant.  Examples of valid \fIlong\fP constants include:
+.RS
+.nf
+\-2
+1234567890L
+0123		// octal
+0x7ff		// hexadecimal
+.fi
+.RE
+.LP
+Floating point constants of type \fIfloat\fP are appropriate for representing
+floating point data with about seven significant digits of precision. 
+The form of a \fIfloat\fP constant is the same as a C floating point
+constant with an `f' or `F' appended.  For example the following
+are all acceptable \fIfloat\fP constants:
+.RS
+.nf
+\-2.0f
+3.14159265358979f	// will be truncated to less precision
+1.f
+
+.fi
+.RE
+.LP
+Floating point constants of type \fIdouble\fP are appropriate for
+representing floating point data with about sixteen significant digits
+of precision.  The form of a \fIdouble\fP constant is the same as a C
+floating point constant.  An optional `d' or `D' may be appended.
+For example the following are all acceptable \fIdouble\fP constants:
+.RS
+.nf
+\-2.0
+3.141592653589793
+1.0e-20
+1.d
+.fi
+.RE
+
+.SH BUGS
+.LP
+The programs generated by \fBncgen3\fP when using the \fB-c\fP or \fB-f\fP
+use initialization statements to store data in variables, and will fail to
+produce compilable programs if you try to use them for large datasets, since
+the resulting statements may exceed the line length or number of
+continuation statements permitted by the compiler.
+.LP
+The CDL syntax makes it easy to assign what looks like an array of
+variable-length strings to a netCDF variable, but the strings will simply be
+concatenated into a single array of characters, since netCDF cannot
+represent an array of variable-length strings in one netCDF variable.
+.LP
+NetCDF and CDL do not yet support a type corresponding to a 64-bit integer.
diff --git a/privatemodules/nc4/share/man/man3/netcdf.3 b/privatemodules/nc4/share/man/man3/netcdf.3
new file mode 100644
index 0000000000000000000000000000000000000000..89985eda96174003e6ea1db7a1851292bad06a67
--- /dev/null
+++ b/privatemodules/nc4/share/man/man3/netcdf.3
@@ -0,0 +1,1405 @@
+.nr yr \n(yr+1900
+.af mo 01
+.af dy 01
+.TH NETCDF 3 "1997-04-18" "Printed: \n(yr-\n(mo-\n(dy" "UNIDATA LIBRARY FUNCTIONS"
+.SH NAME
+netcdf \- Unidata's Network Common Data Form (netCDF) library interface
+.SH SYNOPSIS
+.ft B
+.na
+.nh
+#include "netcdf.h"
+.sp
+
+cc ...  \-lnetcdf \-lhdf5_hl \-lhdf5 \-lz \-lm
+
+.ad
+.hy
+Complete documentation for the netCDF libraries can be found at the netCDF website: http://www.unidata.ucar.edu/software/netcdf/.
+.sp
+.SH "LIBRARY VERSION"
+.LP
+This document describes versions 3 and 4
+of Unidata netCDF data-access interface
+for the C programming language.
+.HP
+\fBconst char* nc_inq_libvers()\fR
+.sp
+Returns a string identifying the version of the netCDF library, and
+when it was built, like: "3.1a of Aug 22 1996 12:57:47 $".
+.LP
+The RCS \fBident(1)\fP command will find a string like
+"$\|Id: @\|(#) netcdf library version 3.1a of Sep  6 1996 15:56:26 $"
+in the library. The SCCS \fBwhat(1)\fP command will find a string like
+"netcdf library version 3.1a of Aug 23 1996 16:07:40 $".
+.SH "RETURN VALUES"
+.LP
+All netCDF functions (except
+\fBnc_inq_libvers(\|)\fR and \fBnc_strerror(\|)\fR) return an integer status.
+
+If this returned status value is not equal to
+\fBNC_NOERR\fR (zero), it
+indicates that an error occurred. The possible status values are defined in
+system include file <errno.h> and in "netcdf.h".
+.HP
+\fBconst char* nc_strerror(int \fIstatus\fP)\fR
+.sp
+Returns a string textual translation of the \fIstatus\fP
+value, like "Attribute or variable name contains illegal characters"
+or "No such file or directory".
+.sp
+.SH "FILE OPERATIONS"
+.LP
+.HP
+\fBint nc_create(const char \fIpath\fP[], int \fIcmode\fP, int* \fIncid\fP)\fR
+.sp
+Creates a new netCDF dataset at \fIpath\fP,
+returning a netCDF ID in \fIncid\fP.
+The argument \fIcmode\fP may include the bitwise-or
+of the following flags:
+\fBNC_NOCLOBBER\fR
+to protect existing datasets (default
+silently blows them away),
+\fBNC_SHARE\fR
+for synchronous dataset updates for classic format files
+(default is to buffer accesses),
+.sp
+When a netCDF dataset is created, is is opened
+\fBNC_WRITE\fR.
+The new netCDF dataset is in define mode.
+\fBNC_64BIT_OFFSET\fR.
+to create a file in the 64-bit offset format
+(as opposed to classic format, the default).
+\fBNC_TRUE\fR to create a netCDF-4/HDF5 file,
+and \fBNC_CLASSIC_MODEL\fR to guarantee that netCDF-4/HDF5 files maintain compatibility
+with the netCDF classic data model.
+.HP
+\fBint nc__create(const char \fIpath\fP[], int \fIcmode\fP, size_t \fIinitialsize\fP, size_t* \fIchunksize\fP, int* \fIncid\fP)\fR
+.sp
+Like \fBnc_create(\|)\fR but has additional performance tuning parameters.
+.sp
+The argument \fIinitialsize\fP sets the initial size of the file at
+creation time.
+.sp
+See \fBnc__open(\|)\fR below for an explanation of the \fIchunksize\fP
+parameter.
+.HP
+\fBint nc_open(const char \fIpath\fP[], int \fImode\fP, int* \fIncid\fP)\fR
+.sp
+(Corresponds to \fBncopen(\|)\fR in version 2)
+.sp
+Opens a existing netCDF dataset at \fIpath\fP
+returning a netCDF ID
+in \fIncid\fP.
+The type of access is described by the \fImode\fP parameter,
+which may include the bitwise-or
+of the following flags:
+\fBNC_WRITE\fR
+for read-write access (default
+read-only),
+\fBNC_SHARE\fR
+for synchronous dataset updates (default is
+to buffer accesses), and
+\fBNC_LOCK\fR
+(not yet implemented).
+.sp
+As of NetCDF version 4.1, and if TRUE support was enabled
+when the NetCDF library was built, the path parameter
+may specify a TRUE URL. In this case, the access mode is
+forced to be read-only.
+.HP
+\fBint nc__open(const char \fIpath\fP[], int \fImode\fP, size_t* \fIchunksize\fP, int* \fIncid\fP)\fR
+.sp
+Like \fBnc_open(\|)\fR but has an additional performance tuning parameter.
+.sp
+The argument referenced by \fIchunksize\fP controls a space versus time
+tradeoff, memory allocated in the netcdf library versus number of system
+calls.
+Because of internal requirements, the value may not be set to exactly
+the value requested.
+The actual value chosen is returned by reference.
+Using the value \fBNC_SIZEHINT_DEFAULT\fR causes the library to choose a
+default.
+How the system choses the default depends on the system.
+On many systems, the "preferred I/O block size" is available from the
+\fBstat()\fR system call, \fBstruct stat\fR member \fBst_blksize\fR.
+If this is available it is used. Lacking that, twice the system pagesize
+is used.
+Lacking a call to discover the system pagesize, we just set default
+chunksize to 8192.
+.sp
+The chunksize is a property of a given open netcdf descriptor
+\fIncid\fP, it is not a persistent property of the netcdf dataset.
+.sp
+As with \fBnc__open(\|)\fR, the path parameter
+may specify a TRUE URL, but the tuning parameters are ignored.
+.HP
+\fBint nc_redef(int \fIncid\fP)\fR
+.sp
+(Corresponds to \fBncredef(\|)\fR in version 2)
+.sp
+Puts an open netCDF dataset into define mode,
+so dimensions, variables, and attributes can be added or renamed and
+attributes can be deleted.
+.HP
+\fBint nc_enddef(int \fIncid\fP)\fR
+.sp
+(Corresponds to \fBncendef(\|)\fR in version 2)
+.sp
+Takes an open netCDF dataset out of define mode.
+The changes made to the netCDF dataset
+while it was in define mode are checked and committed to disk if no
+problems occurred.  Some data values may be written as well,
+see "VARIABLE PREFILLING" below.
+After a successful call, variable data can be read or written to the dataset.
+.HP
+\fBint nc__enddef(int \fIncid\fP, size_t \fIh_minfree\fP, size_t \fIv_align\fP, size_t \fIv_minfree\fP, size_t \fIr_align\fP)\fR
+.sp
+Like \fBnc_enddef(\|)\fR but has additional performance tuning parameters.
+.sp
+Caution: this function exposes internals of the netcdf version 1 file
+format.
+It may not be available on future netcdf implementations.
+.sp
+The current netcdf file format has three sections,
+the "header" section, the data section for fixed size variables, and
+the data section for variables which have an unlimited dimension (record
+variables).
+The header begins at the beginning of the file. The index
+(offset) of the beginning of the other two sections is contained in the
+header. Typically, there is no space between the sections. This causes
+copying overhead to accrue if one wishes to change the size of the
+sections,
+as may happen when changing names of things, text attribute values,
+adding
+attributes or adding variables. Also, for buffered i/o, there may be
+advantages
+to aligning sections in certain ways.
+.sp
+The minfree parameters allow one to control costs of future calls
+to \fBnc_redef(\|)\fR, \fBnc_enddef(\|)\fR by requesting that \fIminfree\fP bytes be
+available at the end of the section.
+The \fIh_minfree\fP parameter sets the pad
+at the end of the "header" section. The \fIv_minfree\fP parameter sets
+the pad at the end of the data section for fixed size variables.
+.sp
+The align parameters allow one to set the alignment of the beginning of
+the corresponding sections. The beginning of the section is rounded up
+to an index which is a multiple of the align parameter. The flag value
+\fBNC_ALIGN_CHUNK\fR tells the library to use the chunksize (see above)
+as the align parameter.
+The \fIv_align\fP parameter controls the alignment of the beginning of
+the data section for fixed size variables.
+The \fIr_align\fP parameter controls the alignment of the beginning of
+the data section for variables which have an unlimited dimension (record
+variables).
+.sp
+The file format requires mod 4 alignment, so the align parameters
+are silently rounded up to multiples of 4. The usual call,
+\fBnc_enddef(\fIncid\fP)\fR
+is equivalent to
+\fBnc__enddef(\fIncid\fP, 0, 4, 0, 4)\fR.
+.sp
+The file format does not contain a "record size" value, this is
+calculated from the sizes of the record variables. This unfortunate fact
+prevents us from providing minfree and alignment control of the
+"records"
+in a netcdf file. If you add a variable which has an unlimited
+dimension,
+the third section will always be copied with the new variable added.
+.HP
+\fBint nc_sync(int \fIncid\fP)\fR
+.sp
+(Corresponds to \fBncsync(\|)\fR in version 2)
+.sp
+Unless the
+\fBNC_SHARE\fR
+bit is set in
+\fBnc_open(\|)\fR or \fBnc_create(\|)\fR,
+accesses to the underlying netCDF dataset are
+buffered by the library. This function synchronizes the state of
+the underlying dataset and the library.
+This is done automatically by
+\fBnc_close(\|)\fR and \fBnc_enddef(\|)\fR.
+.HP
+\fBint nc_abort(int \fIncid\fP)\fR
+.sp
+(Corresponds to \fBncabort(\|)\fR in version 2)
+.sp
+You don't need to call this function.
+This function is called automatically by
+\fBnc_close(\|)\fR
+if the netCDF was in define mode and something goes wrong with the commit.
+If the netCDF dataset isn't in define mode, then this function is equivalent to
+\fBnc_close(\|)\fR.
+If it is called after
+\fBnc_redef(\|)\fR,
+but before
+\fBnc_enddef(\|)\fR,
+the new definitions are not committed and the dataset is closed.
+If it is called after
+\fBnc_create(\|)\fR
+but before
+\fBnc_enddef(\|)\fR,
+the dataset disappears.
+.HP
+\fBint nc_close(int \fIncid\fP)\fR
+.sp
+(Corresponds to
+\fBncclose(\|)\fR in version 2)
+.sp
+Closes an open netCDF dataset.
+If the dataset is in define mode,
+\fBnc_enddef(\|)\fR
+will be called before closing.
+After a dataset is closed, its ID may be reassigned to another dataset.
+.HP
+\fBint nc_inq(int \fIncid\fP, int* \fIndims\fP, int* \fInvars\fP,
+int* \fInatts\fP, int* \fIunlimdimid\fP)\fR
+.HP
+\fBint nc_inq_ndims(int \fIncid\fP, int* \fIndims\fP)\fR
+.HP
+\fBint nc_inq_nvars(int \fIncid\fP, int* \fInvars\fP)\fR
+.HP
+\fBint nc_inq_natts(int \fIncid\fP, int* \fInatts\fP)\fR
+.HP
+\fBint nc_inq_unlimdim(int \fIncid\fP, int* \fIunlimdimid\fP)\fR
+.HP
+\fBint nc_inq_format(int \fIncid\fP, int* \fIformatn\fP)\fR
+.sp
+Use these functions to find out what is in a netCDF dataset.
+Upon successful return,
+\fIndims\fP will contain  the
+number of dimensions defined for this netCDF dataset,
+\fInvars\fP will contain the number of variables,
+\fInatts\fP will contain the number of attributes, and
+\fIunlimdimid\fP will contain the
+dimension ID of the unlimited dimension if one exists, or
+\-1 otherwise.
+\fIformatn\fP will contain the version number of the dataset <format>, one of
+\fBNC_FORMAT_CLASSIC\fR, \fBNC_FORMAT_64BIT_OFFSET\fR, \fBNC_FORMAT_NETCDF4\fR, or
+\fBNC_FORMAT_NETCDF4_CLASSIC\fR.
+If any of the
+return parameters is a \fBNULL\fR pointer, then the corresponding information
+will not be returned; hence, no space need be allocated for it.
+.HP
+\fBint nc_def_dim(int \fIncid\fP, const char \fIname\fP[], size_t \fIlen\fP, int* \fIdimid\fP)\fR
+.sp
+(Corresponds to \fBncdimdef(\|)\fR in version 2)
+.sp
+Adds a new dimension to an open netCDF dataset, which must be
+in define mode.
+\fIname\fP is the dimension name.
+If \fIdimid\fP is not a \fBNULL\fR pointer then upon successful completion \fIdimid\fP will contain the dimension ID of the newly created dimension.
+
+.SH "USER DEFINED TYPES"
+.LP
+Users many define types for a netCDF-4/HDF5 file (unless the
+\fBNC_CLASSIC_MODEL\fR was used when the file was creates). Users may
+define compound types, variable length arrays, enumeration types, and
+opaque types.
+.sp
+
+.HP
+\fBint nc_def_compound(int \fIncid\fP, size_t \fIsize\fP, const char \fIname\fP[], int* \fItypeidp\fP)\fR
+.sp
+Define a compound type.
+.HP
+\fBint nc_insert_compound(int \fIncid\fP, nc_type \fI\fP, const char \fIname\fP[], size_t \fIoffset\fP, nc_type \fIfield_typeid\fP)\fR
+.sp
+Insert an element into a compound type. May not be done after type has been used, or after the type has been written by an enddef.
+.HP
+\fBint nc_insert_array_compound(int \fIncid\fP, nc_type \fI\fP, const char \fIname\fP[], size_t \fIoffset\fP, nc_type \fIfield_typeid\fP, int \fIndims\fP, const int \fIdim_sizes\fP[])\fR
+.sp
+Insert an array into a compound type.
+.HP
+\fBint nc_inq_type(int \fIncid\fP, nc_type \fI\fP, char \fIname\fP[], size_t* \fIsizep\fP)\fR
+.sp
+Learn about a type.
+.HP
+\fBint nc_inq_compound(int \fIncid\fP, nc_type \fI\fP, char \fIname\fP[], size_t* \fIsizep\fP, size_t* \fInfieldsp\fP)\fR
+.HP
+\fBint nc_inq_compound_name(int \fIncid\fP, nc_type \fI\fP, char \fIname\fP[])\fR
+.HP
+\fBint nc_inq_compound_size(int \fIncid\fP, nc_type \fI\fP, size_t* \fIsizep\fP)\fR
+.HP
+\fBint nc_inq_compound_nfields(int \fIncid\fP, nc_type \fI\fP, size_t* \fInfieldsp\fP)\fR
+.HP
+\fBint nc_inq_compound_fieldname(int \fIncid\fP, nc_type \fI\fP, int \fIfieldid\fP, char \fIname\fP[])\fR
+.HP
+\fBint nc_inq_compound_fieldindex(int \fIncid\fP, nc_type \fI\fP, const char \fIname\fP[], int* \fIfieldidp\fP)\fR
+.HP
+\fBint nc_inq_compound_fieldoffset(int \fIncid\fP, nc_type \fI\fP, int \fIfieldid\fP, size_t* \fIoffsetp\fP)\fR
+.HP
+\fBint nc_inq_compound_fieldtype(int \fIncid\fP, nc_type \fI\fP, int \fIfieldid\fP, nc_type* \fIfield_typeid\fP)\fR
+.HP
+\fBint nc_inq_compound_fieldndims(int \fIncid\fP, nc_type \fI\fP, int \fIfieldid\fP, int* \fIndims\fP)\fR
+.HP
+\fBint nc_inq_compound_fielddim_sizes(int \fIncid\fP, nc_type \fI\fP, int \fIfieldid\fP, int \fIdim_sizes\fP[])\fR
+.sp
+Learn about a compound type.
+.HP
+\fBint nc_def_vlen(int \fIncid\fP, const char \fIname\fP[], nc_type \fIbase_typeid\fP, nc_type* \fIxtypep\fP)\fR
+.sp
+Create a variable length array type.
+.HP
+\fBint nc_inq_vlen(int \fIncid\fP, nc_type \fI\fP, char \fIname\fP[], size_t* \fIdatum_sizep\fP, nc_type* \fIbase_nc_typep\fP)\fR
+.sp
+Learn about a variable length array type.
+.HP
+\fBint nc_free_vlen(nc_vlen_t *vl)\fR
+.sp
+Free memory comsumed by reading data of a variable length array type.
+.HP
+\fBint nc_put_vlen_element(int \fIncid\fP, nc_type \fI\fP, void * \fIvlen_element\fP, size_t \fIlen\fP, void * \fIdata\fP)\fR
+.sp
+Write one VLEN.
+.HP
+\fBint nc_get_vlen_element(int \fIncid\fP, nc_type \fI\fP, void ** \fIvlen_element\fP, size_t \fIlen\fP, void ** \fIdata\fP)\fR
+.sp
+Read one VLEN.
+.HP
+\fBint nc_free_string(size_t \fIlen\fP, char **data)\fR
+.sp
+Free memory comsumed by reading data of a string type.
+.HP
+\fBint nc_inq_user_type(int \fIncid\fP, nc_type \fI\fP, char \fIname\fP[], size_t* \fI\fP, nc_type* \fI\fP, size_t* \fI\fP, int* \fI\fP)\fR
+.sp
+Learn about a user define type.
+.HP
+\fBint nc_def_enum(int \fIncid\fP, nc_type \fIbase_typeid\fP, const char \fIname\fP[], nc_type* \fItypeidp\fP)\fR
+.sp
+Define an enumeration type.
+.HP
+\fBint nc_insert_enum(int \fIncid\fP, nc_type \fIbase_typeid\fP, const char \fIname\fP[], const void *value)\fR
+.sp
+Insert a name-value pair into enumeration type.
+.HP
+\fBint nc_inq_enum_member(int \fIncid\fP, nc_type \fIxtype\fP, int \fIidx\fP, char \fIname\fP[], void *value)\fR
+.HP
+\fBint nc_inq_enum_ident(int \fIncid\fP, nc_type \fIxtype\fP, int \fIidx\fP, long long \fIvalue\fP, char \fIidentifier\fP[])\fR
+.sp
+Learn about a name-value pair into enumeration type.
+.HP
+\fBint nc_def_opaque(int \fIncid\fP, size_t \fIsize\fP, const char \fIname\fP[], nc_type* \fIxtypep\fP)\fR
+.sp
+Create an opaque type.
+.HP
+\fBint nc_inq_opaque(int \fIncid\fP, nc_type \fIxtype\fP, char \fIname\fP[], size_t* \fIsizep\fP)\fR
+.sp
+Learn about opaque type.
+.HP
+.SH "GROUPS"
+.sp
+Users may organize data into hierarchical groups in netCDF-4/HDF5 files (unless \fBNC_CLASSIC_MODEL\fR was used when creating the file).
+.HP
+\fBint nc_inq_grps(int \fIncid\fP, int* \fInumgrps\fP, int \fIncids\fP[])\fR
+.sp
+Learn how many groups (and their ncids) are available from the group represented by ncid.
+.HP
+\fBint nc_inq_grpname(int \fIncid\fP, char \fIname\fP[])\fR
+.HP
+\fBint nc_inq_grpname_full(int \fIncid\fP, size_t* \fIlen\fP, char \fIname\fP[])\fR
+.HP
+\fBint nc_inq_grpname_len(int \fIncid\fP, size_t* \fIlen\fP)\fR
+.HP
+\fBint nc_inq_grp_parent(int \fIncid\fP, int* \fIncid\fP)\fR
+.HP
+\fBint nc_inq_grp_ncid(int \fIncid\fP, char \fIname\fP[], int* \fIncid\fP)\fR
+.HP
+\fBint nc_inq_full_ncid(int \fIncid\fP, char \fIname\fP[], int* \fIncid\fP)\fR
+.sp
+Learn about a group.
+.HP
+\fBint nc_inq_varids(int \fIncid\fP, int* \fInvars\fP, int* \fI\fP)\fR
+.sp
+Get the varids in a group.
+.HP
+\fBint nc_inq_dimids(int \fIncid\fP, int* \fIndims\fP, int* \fIdimids\fP, int \fIinclude_parents\fP)\fR
+.sp
+Get the dimids in a group and (potentially) its parents.
+.HP
+\fBint nc_inq_typeids(int \fIncid\fP, int* \fIntypes\fP, int \fItypeids\fP[])\fR
+.sp
+Get the typeids of user-defined types in a group.
+.HP
+\fBint nc_def_grp(int \fIncid\fP, char \fIname\fP[], int* \fIncid\fP)\fR
+.sp
+Create a group.
+.LP
+
+.SH "DIMENSIONS"
+.LP
+.HP
+\fBint nc_inq_dimid(int \fIncid\fP, const char \fIname\fP[], int* \fIdimid\fP)\fR
+.sp
+(Corresponds to \fBncdimid(\|)\fR in version 2)
+.sp
+Given a dimension name, returns the ID of a netCDF dimension in \fIdimid\fP.
+.HP
+\fBint nc_inq_dim(int \fIncid\fP, int \fIdimid\fP, char \fIname\fP[], size_t* \fIlen\fP)\fR
+.HP
+\fBint nc_inq_dimname(int \fIncid\fP, int \fIdimid\fP, char \fIname\fP[])\fR
+.HP
+\fBint nc_inq_dimlen(int \fIncid\fP, int \fIdimid\fP, size_t* \fIlen\fP)\fR
+.sp
+Use these functions to find out about a dimension.
+If either the \fIname\fP
+argument or \fIlen\fP argument is a \fBNULL\fR pointer, then
+the associated information will not be returned.  Otherwise,
+\fIname\fP should be  big enough (\fBNC_MAX_NAME\fR)
+to hold the dimension name as the name will be copied into your storage.
+The length return parameter, \fIlen\fP
+will contain the size of the dimension.
+For the unlimited dimension, the returned length is the current
+maximum value used for writing into any of the variables which use
+the dimension.
+.HP
+\fBint nc_rename_dim(int \fIncid\fP, int \fIdimid\fP, const char \fIname\fP[])\fR
+.sp
+(Corresponds to \fBncdimrename(\|)\fR in version 2)
+.sp
+Renames an existing dimension in an open netCDF dataset.
+If the new name is longer than the old name, the netCDF dataset must be in
+define mode.
+You cannot rename a dimension to have the same name as another dimension.
+.SH "VARIABLES"
+.LP
+.HP
+\fBint nc_def_var(int \fIncid\fP, const char \fIname\fP[], nc_type \fIxtype\fP, int \fIndims\fP, const int \fIdimids\fP[], int* \fIvarid\fP)\fR
+.sp
+(Corresponds to \fBncvardef(\|)\fR in version 2)
+.sp
+Adds a new variable to a netCDF dataset. The netCDF must be in define mode.
+If not \fBNULL\fR, then \fIvarid\fP will be set to the netCDF variable ID.
+.HP
+\fBint nc_inq_varid(int \fIncid\fP, const char \fIname\fP[], int* \fIvarid\fP)\fR
+.sp
+(Corresponds to \fBncvarid(\|)\fR in version 2)
+.sp
+Returns the ID of a netCDF variable in \fIvarid\fP given its name.
+.HP
+\fBint nc_inq_var(int \fIncid\fP, int \fIvarid\fP, char \fIname\fP[], nc_type* \fIxtype\fP, int* \fIndims\fP, int \fIdimids\fP[],
+int* \fInatts\fP)\fR
+.HP
+\fBint nc_inq_varname(int \fIncid\fP, int \fIvarid\fP, char \fIname\fP[])\fR
+.HP
+\fBint nc_inq_vartype(int \fIncid\fP, int \fIvarid\fP, nc_type* \fIxtype\fP)\fR
+.HP
+\fBint nc_inq_varndims(int \fIncid\fP, int \fIvarid\fP, int* \fIndims\fP)\fR
+.HP
+\fBint nc_inq_vardimid(int \fIncid\fP, int \fIvarid\fP, int \fIdimids\fP[])\fR
+.HP
+\fBint nc_inq_varnatts(int \fIncid\fP, int \fIvarid\fP, int* \fInatts\fP)\fR
+.sp
+Returns information about a netCDF variable, given its ID.
+If any of the
+return parameters (\fIname\fP, \fIxtype\fP, \fIndims\fP, \fIdimids\fP, or
+\fInatts\fP) is a \fBNULL\fR pointer, then the corresponding information
+will not be returned; hence, no space need be allocated for it.
+.HP
+\fBint nc_rename_var(int \fIncid\fP, int \fIvarid\fP, const char \fIname\fP[])\fR
+.sp
+(Corresponds to \fBncvarrename(\|)\fR in version 2)
+.sp
+Changes the name of a netCDF variable.
+If the new name is longer than the old name, the netCDF must be in define mode.
+You cannot rename a variable to have the name of any existing variable.
+
+.SH "VARIABLES \fIin\fP NETCDF-4 FILES"
+.LP
+The following functions may only be used on variables in a
+netCDF-4/HDF5 data file. These functions must be called after the
+variable is defined, but before an enddef call.
+.sp
+\fBint nc_def_var_deflate(int \fIncid\fP, int \fIvarid\fP, int \fIshuffle\fP, int \fIdeflate\fP, int \fIdeflate_level\fP)\fR
+.sp
+Turn on compression and/or shuffle filter. (Shuffle filter is only useful for integer data.)
+.HP
+\fBint nc_inq_var_deflate(int \fIncid\fP, int \fIvarid\fP, int* \fIshufflep\fP, int* \fIdeflatep\fP, int* \fIdeflate_levelp\fP)\fR
+.sp
+Learn about a variable's deflate settings.
+.HP
+\fBint nc_def_var_fletcher32(int \fIncid\fP, int \fIvarid\fP, int \fIfletcher32\fP)\fR
+.sp
+Turn on checksumming for a variable.
+.HP
+\fBint nc_inq_var_fletcher32(int \fIncid\fP, int \fIvarid\fP, int* \fIfletcher32\fP)\fR
+.sp
+Learn about checksumming for a variable.
+.HP
+\fBint nc_def_var_chunking(int \fIncid\fP, int \fIvarid\fP, int \fIstorage\fP, const size_t \fIchunksizesp\fP[])\fR
+.sp
+Set chunksizes for a variable.
+.HP
+\fBint nc_inq_var_chunking(int \fIncid\fP, int \fIvarid\fP, int* \fIstoragep\fP, size_t \fIchunksizesp\fP[])\fR
+.sp
+Learn about chunksizes for a variable.
+.HP
+\fBint nc_def_var_fill(int \fIncid\fP, int \fIvarid\fP, int \fIno_fill\fP, const size_t \fIchunksizesp\fP[])\fR
+.sp
+Set a fill value for a variable.
+.HP
+\fBint nc_inq_var_fill(int \fIncid\fP, int \fIvarid\fP, int* \fIstoragep\fP, size_t \fIchunksizesp\fP[])\fR
+.sp
+Learn the fill value for a variable.
+.HP
+\fBint nc_def_var_endian(int \fIncid\fP, int \fIvarid\fP, int \fIendian\fP)\fR
+.sp
+Set endianness of variable.
+.HP
+\fBint nc_inq_var_endian(int \fIncid\fP, int \fIvarid\fP, int* \fIendianp\fP)\fR
+.sp
+Learn the endianness of a variable.
+.HP
+
+.SH "WRITING AND READING WHOLE VARIABLES"
+.LP
+.HP
+\fBint nc_put_var_text(int \fIncid\fP, int \fIvarid\fP, const char \fIout\fP[])\fR
+.HP
+\fBint nc_put_var_uchar(int \fIncid\fP, int \fIvarid\fP, const unsigned char \fIout\fP[])\fR
+.HP
+\fBint nc_put_var_schar(int \fIncid\fP, int \fIvarid\fP, const signed char \fIout\fP[])\fR
+.HP
+\fBint nc_put_var_short(int \fIncid\fP, int \fIvarid\fP, const short \fIout\fP[])\fR
+.HP
+\fBint nc_put_var_int(int \fIncid\fP, int \fIvarid\fP, const int \fIout\fP[])\fR
+.HP
+\fBint nc_put_var_long(int \fIncid\fP, int \fIvarid\fP, const long \fIout\fP[])\fR
+.HP
+\fBint nc_put_var_float(int \fIncid\fP, int \fIvarid\fP, const float \fIout\fP[])\fR
+.HP
+\fBint nc_put_var_double(int \fIncid\fP, int \fIvarid\fP, const double \fIout\fP[])\fR
+.HP
+\fBint nc_put_var_ubyte(int \fIncid\fP, int \fIvarid\fP, const unsigned char \fIout\fP[])\fR
+.HP
+\fBint nc_put_var_ushort(int \fIncid\fP, int \fIvarid\fP, const unsigned short \fIout\fP[])\fR
+.HP
+\fBint nc_put_var_uint(int \fIncid\fP, int \fIvarid\fP, const unsigned int \fIout\fP[])\fR
+.HP
+\fBint nc_put_var_int64(int \fIncid\fP, int \fIvarid\fP, const long long \fIout\fP[])\fR
+.HP
+\fBint nc_put_var_uint64(int \fIncid\fP, int \fIvarid\fP, const unsigned long long \fIout\fP[])\fR
+.HP
+\fBint nc_put_var_string(int \fIncid\fP, int \fIvarid\fP, const char * \fIout\fP[])\fR
+
+
+.sp
+Writes an entire netCDF variable (i.e. all the values).  The netCDF
+dataset must be open and in data mode.  The type of the data is
+specified in the function name, and it is converted to the external
+type of the specified variable, if possible, otherwise an
+\fBNC_ERANGE\fR error is returned. Note that rounding is not performed
+during the conversion. Floating point numbers are truncated when
+converted to integers.
+.HP
+\fBint nc_get_var_text(int \fIncid\fP, int \fIvarid\fP, char \fIin\fP[])\fR
+.HP
+\fBint nc_get_var_uchar(int \fIncid\fP, int \fIvarid\fP, unsigned char \fIin\fP[])\fR
+.HP
+\fBint nc_get_var_schar(int \fIncid\fP, int \fIvarid\fP, signed char \fIin\fP[])\fR
+.HP
+\fBint nc_get_var_short(int \fIncid\fP, int \fIvarid\fP, short \fIin\fP[])\fR
+.HP
+\fBint nc_get_var_int(int \fIncid\fP, int \fIvarid\fP, int \fIin\fP[])\fR
+.HP
+\fBint nc_get_var_long(int \fIncid\fP, int \fIvarid\fP, long \fIin\fP[])\fR
+.HP
+\fBint nc_get_var_float(int \fIncid\fP, int \fIvarid\fP, float \fIin\fP[])\fR
+.HP
+\fBint nc_get_var_double(int \fIncid\fP, int \fIvarid\fP, double \fIin\fP[])\fR
+.HP
+\fBint nc_get_var_ubyte(int \fIncid\fP, int \fIvarid\fP, unsigned char \fIin\fP[])\fR
+.HP
+\fBint nc_get_var_ushort(int \fIncid\fP, int \fIvarid\fP, unsigned short \fIin\fP[])\fR
+.HP
+\fBint nc_get_var_uint(int \fIncid\fP, int \fIvarid\fP, unsigned int \fIin\fP[])\fR
+.HP
+\fBint nc_get_var_int64(int \fIncid\fP, int \fIvarid\fP, long long \fIin\fP[])\fR
+.HP
+\fBint nc_get_var_uint64(int \fIncid\fP, int \fIvarid\fP, unsigned long long \fIin\fP[])\fR
+.HP
+\fBint nc_get_var_string(int \fIncid\fP, int \fIvarid\fP, char * \fIin\fP[])\fR
+
+
+.sp
+Reads an entire netCDF variable (i.e. all the values).
+The netCDF dataset must be open and in data mode.
+The data is converted from the external type of the specified variable,
+if necessary, to the type specified in the function name.  If conversion is
+not possible, an \fBNC_ERANGE\fR error is returned.
+.SH "WRITING AND READING ONE DATUM"
+.LP
+.HP
+\fBint nc_put_var1_text(int \fIncid\fP, int \fIvarid\fP, const size_t \fIindex\fP[], char \fI*out\fP)\fR
+.HP
+\fBint nc_put_var1_uchar(int \fIncid\fP, int \fIvarid\fP, const size_t \fIindex\fP[], unsigned char \fI*out\fP)\fR
+.HP
+\fBint nc_put_var1_schar(int \fIncid\fP, int \fIvarid\fP, const size_t \fIindex\fP[], signed char \fI*out\fP)\fR
+.HP
+\fBint nc_put_var1_short(int \fIncid\fP, int \fIvarid\fP, const size_t \fIindex\fP[], short \fI*out\fP)\fR
+.HP
+\fBint nc_put_var1_int(int \fIncid\fP, int \fIvarid\fP, const size_t \fIindex\fP[], int \fI*out\fP)\fR
+.HP
+\fBint nc_put_var1_long(int \fIncid\fP, int \fIvarid\fP, const size_t \fIindex\fP[], long \fI*out\fP)\fR
+.HP
+\fBint nc_put_var1_float(int \fIncid\fP, int \fIvarid\fP, const size_t \fIindex\fP[], float \fI*out\fP)\fR
+.HP
+\fBint nc_put_var1_double(int \fIncid\fP, int \fIvarid\fP, const size_t \fIindex\fP[], double \fI*out\fP)\fR
+.HP
+\fBint nc_put_var1_ubyte(int \fIncid\fP, int \fIvarid\fP, const size_t \fIindex\fP[], unsigned char \fI*out\fP)\fR
+.HP
+\fBint nc_put_var1_ushort(int \fIncid\fP, int \fIvarid\fP, const size_t \fIindex\fP[], unsigned short \fI*out\fP)\fR
+.HP
+\fBint nc_put_var1_uint(int \fIncid\fP, int \fIvarid\fP, const size_t \fIindex\fP[], unsigned int \fI*out\fP)\fR
+.HP
+\fBint nc_put_var1_int64(int \fIncid\fP, int \fIvarid\fP, const size_t \fIindex\fP[], long long \fI*out\fP)\fR
+.HP
+\fBint nc_put_var1_uint64(int \fIncid\fP, int \fIvarid\fP, const size_t \fIindex\fP[], unsigned long long \fI*out\fP)\fR
+.HP
+\fBint nc_put_var1_string(int \fIncid\fP, int \fIvarid\fP, const size_t \fIindex\fP[], char * \fI*out\fP)\fR
+
+
+.sp
+Puts a single data value into a variable at the position \fIindex\fP of an
+open netCDF dataset that is in data mode.  The type of the data is
+specified in the function name, and it is converted to the external type
+of the specified variable, if possible, otherwise an \fBNC_ERANGE\fR
+error is returned.
+.HP
+\fBint nc_get_var1_text(int \fIncid\fP, int \fIvarid\fP, const size_t \fIindex\fP[], char* \fIin\fP)\fR
+.HP
+\fBint nc_get_var1_uchar(int \fIncid\fP, int \fIvarid\fP, const size_t \fIindex\fP[], unsigned char* \fIin\fP)\fR
+.HP
+\fBint nc_get_var1_schar(int \fIncid\fP, int \fIvarid\fP, const size_t \fIindex\fP[], signed char* \fIin\fP)\fR
+.HP
+\fBint nc_get_var1_short(int \fIncid\fP, int \fIvarid\fP, const size_t \fIindex\fP[], short* \fIin\fP)\fR
+.HP
+\fBint nc_get_var1_int(int \fIncid\fP, int \fIvarid\fP, const size_t \fIindex\fP[], int* \fIin\fP)\fR
+.HP
+\fBint nc_get_var1_long(int \fIncid\fP, int \fIvarid\fP, const size_t \fIindex\fP[], long* \fIin\fP)\fR
+.HP
+\fBint nc_get_var1_float(int \fIncid\fP, int \fIvarid\fP, const size_t \fIindex\fP[], float* \fIin\fP)\fR
+.HP
+\fBint nc_get_var1_double(int \fIncid\fP, int \fIvarid\fP, const size_t \fIindex\fP[], double* \fIin\fP)\fR
+.HP
+\fBint nc_get_var1_ubyte(int \fIncid\fP, int \fIvarid\fP, const size_t \fIindex\fP[], unsigned char* \fIin\fP)\fR
+.HP
+\fBint nc_get_var1_ushort(int \fIncid\fP, int \fIvarid\fP, const size_t \fIindex\fP[], unsigned short* \fIin\fP)\fR
+.HP
+\fBint nc_get_var1_uint(int \fIncid\fP, int \fIvarid\fP, const size_t \fIindex\fP[], unsigned int* \fIin\fP)\fR
+.HP
+\fBint nc_get_var1_int64(int \fIncid\fP, int \fIvarid\fP, const size_t \fIindex\fP[], long long* \fIin\fP)\fR
+.HP
+\fBint nc_get_var1_uint64(int \fIncid\fP, int \fIvarid\fP, const size_t \fIindex\fP[], unsigned long long* \fIin\fP)\fR
+.HP
+\fBint nc_get_var1_string(int \fIncid\fP, int \fIvarid\fP, const size_t \fIindex\fP[], char ** \fIin\fP)\fR
+
+
+.sp
+Gets a single data value from a variable at the position \fIindex\fP
+of an open netCDF dataset that is in data mode.
+The data is converted from the external type of the specified variable,
+if necessary, to the type specified in the function name.  If conversion is
+not possible, an \fBNC_ERANGE\fR error is returned.
+.SH "WRITING AND READING AN ARRAY"
+.LP
+.HP
+\fBint nc_put_vara_text(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const char \fIout\fP[])\fR
+.HP
+\fBint nc_put_vara_uchar(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const unsigned char \fIout\fP[])\fR
+.HP
+\fBint nc_put_vara_schar(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const signed char \fIout\fP[])\fR
+.HP
+\fBint nc_put_vara_short(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const short \fIout\fP[])\fR
+.HP
+\fBint nc_put_vara_int(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const int \fIout\fP[])\fR
+.HP
+\fBint nc_put_vara_long(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const long \fIout\fP[])\fR
+.HP
+\fBint nc_put_vara_float(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const float \fIout\fP[])\fR
+.HP
+\fBint nc_put_vara_double(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const double \fIout\fP[])\fR
+.HP
+\fBint nc_put_vara_ubyte(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const unsigned char \fIout\fP[])\fR
+.HP
+\fBint nc_put_vara_ushort(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const unsigned short \fIout\fP[])\fR
+.HP
+\fBint nc_put_vara_uint(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const unsigned int \fIout\fP[])\fR
+.HP
+\fBint nc_put_vara_int64(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const long long \fIout\fP[])\fR
+.HP
+\fBint nc_put_vara_uint64(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const unsigned long long \fIout\fP[])\fR
+.HP
+\fBint nc_put_vara_string(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const char * \fIout\fP[])\fR
+
+
+.sp
+Writes an array section of values into a netCDF variable of an open
+netCDF dataset, which must be in data mode.  The array section is specified
+by the \fIstart\fP and \fIcount\fP vectors, which give the starting index
+and count of values along each dimension of the specified variable.
+The type of the data is
+specified in the function name and is converted to the external type
+of the specified variable, if possible, otherwise an \fBNC_ERANGE\fR
+error is returned.
+.HP
+\fBint nc_get_vara_text(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], char \fIin\fP[])\fR
+.HP
+\fBint nc_get_vara_uchar(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], unsigned char \fIin\fP[])\fR
+.HP
+\fBint nc_get_vara_schar(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], signed char \fIin\fP[])\fR
+.HP
+\fBint nc_get_vara_short(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], short \fIin\fP[])\fR
+.HP
+\fBint nc_get_vara_int(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], int \fIin\fP[])\fR
+.HP
+\fBint nc_get_vara_long(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], long \fIin\fP[])\fR
+.HP
+\fBint nc_get_vara_float(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], float \fIin\fP[])\fR
+.HP
+\fBint nc_get_vara_double(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], double \fIin\fP[])\fR
+.HP
+\fBint nc_get_vara_ubyte(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], unsigned char \fIin\fP[])\fR
+.HP
+\fBint nc_get_vara_ushort(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], unsigned short \fIin\fP[])\fR
+.HP
+\fBint nc_get_vara_uint(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], unsigned int \fIin\fP[])\fR
+.HP
+\fBint nc_get_vara_int64(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], long long \fIin\fP[])\fR
+.HP
+\fBint nc_get_vara_uint64(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], unsigned long long \fIin\fP[])\fR
+.HP
+\fBint nc_get_vara_string(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], char * \fIin\fP[])\fR
+
+
+.sp
+Reads an array section of values from a netCDF variable of an open
+netCDF dataset, which must be in data mode.  The array section is specified
+by the \fIstart\fP and \fIcount\fP vectors, which give the starting index
+and count of values along each dimension of the specified variable.
+The data is converted from the external type of the specified variable,
+if necessary, to the type specified in the function name.  If conversion is
+not possible, an \fBNC_ERANGE\fR error is returned.
+.SH "WRITING AND READING A SLICED ARRAY"
+.LP
+.HP
+\fBint nc_put_vars_text(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const size_t \fIstride\fP[], const char \fIout\fP[])\fR
+.HP
+\fBint nc_put_vars_uchar(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const size_t \fIstride\fP[], const unsigned char \fIout\fP[])\fR
+.HP
+\fBint nc_put_vars_schar(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const size_t \fIstride\fP[], const signed char \fIout\fP[])\fR
+.HP
+\fBint nc_put_vars_short(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const size_t \fIstride\fP[], const short \fIout\fP[])\fR
+.HP
+\fBint nc_put_vars_int(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const size_t \fIstride\fP[], const int \fIout\fP[])\fR
+.HP
+\fBint nc_put_vars_long(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const size_t \fIstride\fP[], const long \fIout\fP[])\fR
+.HP
+\fBint nc_put_vars_float(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const size_t \fIstride\fP[], const float \fIout\fP[])\fR
+.HP
+\fBint nc_put_vars_double(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const size_t \fIstride\fP[], const double \fIout\fP[])\fR
+.HP
+\fBint nc_put_vars_ubyte(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const size_t \fIstride\fP[], const unsigned char \fIout\fP[])\fR
+.HP
+\fBint nc_put_vars_ushort(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const size_t \fIstride\fP[], const unsigned short \fIout\fP[])\fR
+.HP
+\fBint nc_put_vars_uint(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const size_t \fIstride\fP[], const unsigned int \fIout\fP[])\fR
+.HP
+\fBint nc_put_vars_int64(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const size_t \fIstride\fP[], const long long \fIout\fP[])\fR
+.HP
+\fBint nc_put_vars_uint64(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const size_t \fIstride\fP[], const unsigned long long \fIout\fP[])\fR
+.HP
+\fBint nc_put_vars_string(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const size_t \fIstride\fP[], const char * \fIout\fP[])\fR
+
+
+.sp
+These functions are used for \fIstrided output\fP, which is like the
+array section output described above, except that
+the sampling stride (the interval between accessed values) is
+specified for each dimension.
+For an explanation of the sampling stride
+vector, see COMMON ARGUMENTS DESCRIPTIONS below.
+.HP
+\fBint nc_get_vars_text(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const size_t \fIstride\fP[], char \fIin\fP[])\fR
+.HP
+\fBint nc_get_vars_uchar(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const size_t \fIstride\fP[], unsigned char \fIin\fP[])\fR
+.HP
+\fBint nc_get_vars_schar(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const size_t \fIstride\fP[], signed char \fIin\fP[])\fR
+.HP
+\fBint nc_get_vars_short(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const size_t \fIstride\fP[], short \fIin\fP[])\fR
+.HP
+\fBint nc_get_vars_int(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const size_t \fIstride\fP[], int \fIin\fP[])\fR
+.HP
+\fBint nc_get_vars_long(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const size_t \fIstride\fP[], long \fIin\fP[])\fR
+.HP
+\fBint nc_get_vars_float(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const size_t \fIstride\fP[], float \fIin\fP[])\fR
+.HP
+\fBint nc_get_vars_double(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const size_t \fIstride\fP[], double \fIin\fP[])\fR
+.HP
+\fBint nc_get_vars_ubyte(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const size_t \fIstride\fP[], unsigned char \fIin\fP[])\fR
+.HP
+\fBint nc_get_vars_ushort(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const size_t \fIstride\fP[], unsigned short \fIin\fP[])\fR
+.HP
+\fBint nc_get_vars_uint(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const size_t \fIstride\fP[], unsigned int \fIin\fP[])\fR
+.HP
+\fBint nc_get_vars_int64(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const size_t \fIstride\fP[], long long \fIin\fP[])\fR
+.HP
+\fBint nc_get_vars_uint64(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const size_t \fIstride\fP[], unsigned long long \fIin\fP[])\fR
+.HP
+\fBint nc_get_vars_string(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const size_t \fIstride\fP[], char * \fIin\fP[])\fR
+
+
+.sp
+These functions are used for \fIstrided input\fP, which is like the
+array section input described above, except that
+the sampling stride (the interval between accessed values) is
+specified for each dimension.
+For an explanation of the sampling stride
+vector, see COMMON ARGUMENTS DESCRIPTIONS below.
+.SH "WRITING AND READING A MAPPED ARRAY"
+.LP
+.HP
+\fBint nc_put_varm_text(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const size_t \fIstride\fP[], \fIimap\fP, const char \fIout\fP[])\fR
+.HP
+\fBint nc_put_varm_uchar(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const size_t \fIstride\fP[], \fIimap\fP, const unsigned char \fIout\fP[])\fR
+.HP
+\fBint nc_put_varm_schar(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const size_t \fIstride\fP[], \fIimap\fP, const signed char \fIout\fP[])\fR
+.HP
+\fBint nc_put_varm_short(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const size_t \fIstride\fP[], \fIimap\fP, const short \fIout\fP[])\fR
+.HP
+\fBint nc_put_varm_int(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const size_t \fIstride\fP[], \fIimap\fP, const int \fIout\fP[])\fR
+.HP
+\fBint nc_put_varm_long(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const size_t \fIstride\fP[], \fIimap\fP, const long \fIout\fP[])\fR
+.HP
+\fBint nc_put_varm_float(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const size_t \fIstride\fP[], \fIimap\fP, const float \fIout\fP[])\fR
+.HP
+\fBint nc_put_varm_double(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const size_t \fIstride\fP[], \fIimap\fP, const double \fIout\fP[])\fR
+.HP
+\fBint nc_put_varm_ubyte(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const size_t \fIstride\fP[], \fIimap\fP, const unsigned char \fIout\fP[])\fR
+.HP
+\fBint nc_put_varm_ushort(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const size_t \fIstride\fP[], \fIimap\fP, const unsigned short \fIout\fP[])\fR
+.HP
+\fBint nc_put_varm_uint(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const size_t \fIstride\fP[], \fIimap\fP, const unsigned int \fIout\fP[])\fR
+.HP
+\fBint nc_put_varm_int64(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const size_t \fIstride\fP[], \fIimap\fP, const long long \fIout\fP[])\fR
+.HP
+\fBint nc_put_varm_uint64(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const size_t \fIstride\fP[], \fIimap\fP, const unsigned long long \fIout\fP[])\fR
+.HP
+\fBint nc_put_varm_string(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const size_t \fIstride\fP[], \fIimap\fP, const char * \fIout\fP[])\fR
+
+
+.sp
+These functions are used for \fImapped output\fP, which is like
+strided output described above, except that an additional index mapping
+vector is provided to specify the in-memory arrangement of the data
+values.
+For an explanation of the index
+mapping vector, see COMMON ARGUMENTS DESCRIPTIONS below.
+.HP
+\fBint nc_get_varm_text(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const size_t \fIstride\fP[], \fIimap\fP, char \fIin\fP[])\fR
+.HP
+\fBint nc_get_varm_uchar(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const size_t \fIstride\fP[], \fIimap\fP, unsigned char \fIin\fP[])\fR
+.HP
+\fBint nc_get_varm_schar(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const size_t \fIstride\fP[], \fIimap\fP, signed char \fIin\fP[])\fR
+.HP
+\fBint nc_get_varm_short(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const size_t \fIstride\fP[], \fIimap\fP, short \fIin\fP[])\fR
+.HP
+\fBint nc_get_varm_int(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const size_t \fIstride\fP[], \fIimap\fP, int \fIin\fP[])\fR
+.HP
+\fBint nc_get_varm_long(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const size_t \fIstride\fP[], \fIimap\fP, long \fIin\fP[])\fR
+.HP
+\fBint nc_get_varm_float(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const size_t \fIstride\fP[], \fIimap\fP, float \fIin\fP[])\fR
+.HP
+\fBint nc_get_varm_double(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const size_t \fIstride\fP[], \fIimap\fP, double \fIin\fP[])\fR
+.HP
+\fBint nc_get_varm_ubyte(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const size_t \fIstride\fP[], \fIimap\fP, unsigned char \fIin\fP[])\fR
+.HP
+\fBint nc_get_varm_ushort(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const size_t \fIstride\fP[], \fIimap\fP, unsigned short \fIin\fP[])\fR
+.HP
+\fBint nc_get_varm_uint(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const size_t \fIstride\fP[], \fIimap\fP, unsigned int \fIin\fP[])\fR
+.HP
+\fBint nc_get_varm_int64(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const size_t \fIstride\fP[], \fIimap\fP, long long \fIin\fP[])\fR
+.HP
+\fBint nc_get_varm_uint64(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const size_t \fIstride\fP[], \fIimap\fP, unsigned long long \fIin\fP[])\fR
+.HP
+\fBint nc_get_varm_string(int \fIncid\fP, int \fIvarid\fP, const size_t \fIstart\fP[], const size_t \fIcount\fP[], const size_t \fIstride\fP[], \fIimap\fP, char * \fIin\fP[])\fR
+
+
+.sp
+These functions are used for \fImapped input\fP, which is like
+strided input described above, except that an additional index mapping
+vector is provided to specify the in-memory arrangement of the data
+values.
+For an explanation of the index
+mapping vector, see COMMON ARGUMENTS DESCRIPTIONS below.
+.SH "ATTRIBUTES"
+.LP
+.HP
+\fBint nc_put_att_text(int \fIncid\fP, int \fIvarid\fP, const char \fIname\fP[], nc_type \fIxtype\fP, size_t \fIlen\fP, const char \fIout\fP[])\fR
+.HP
+\fBint nc_put_att_uchar(int \fIncid\fP, int \fIvarid\fP, const char \fIname\fP[], nc_type \fIxtype\fP, size_t \fIlen\fP, const unsigned char \fIout\fP[])\fR
+.HP
+\fBint nc_put_att_schar(int \fIncid\fP, int \fIvarid\fP, const char \fIname\fP[], nc_type \fIxtype\fP, size_t \fIlen\fP, const signed char \fIout\fP[])\fR
+.HP
+\fBint nc_put_att_short(int \fIncid\fP, int \fIvarid\fP, const char \fIname\fP[], nc_type \fIxtype\fP, size_t \fIlen\fP, const short \fIout\fP[])\fR
+.HP
+\fBint nc_put_att_int(int \fIncid\fP, int \fIvarid\fP, const char \fIname\fP[], nc_type \fIxtype\fP, size_t \fIlen\fP, const int \fIout\fP[])\fR
+.HP
+\fBint nc_put_att_long(int \fIncid\fP, int \fIvarid\fP, const char \fIname\fP[], nc_type \fIxtype\fP, size_t \fIlen\fP, const long \fIout\fP[])\fR
+.HP
+\fBint nc_put_att_float(int \fIncid\fP, int \fIvarid\fP, const char \fIname\fP[], nc_type \fIxtype\fP, size_t \fIlen\fP, const float \fIout\fP[])\fR
+.HP
+\fBint nc_put_att_double(int \fIncid\fP, int \fIvarid\fP, const char \fIname\fP[], nc_type \fIxtype\fP, size_t \fIlen\fP, const double \fIout\fP[])\fR
+.HP
+\fBint nc_put_att_ubyte(int \fIncid\fP, int \fIvarid\fP, const char \fIname\fP[], nc_type \fIxtype\fP, size_t \fIlen\fP, const unsigned char \fIout\fP[])\fR
+.HP
+\fBint nc_put_att_ushort(int \fIncid\fP, int \fIvarid\fP, const char \fIname\fP[], nc_type \fIxtype\fP, size_t \fIlen\fP, const unsigned short \fIout\fP[])\fR
+.HP
+\fBint nc_put_att_uint(int \fIncid\fP, int \fIvarid\fP, const char \fIname\fP[], nc_type \fIxtype\fP, size_t \fIlen\fP, const unsigned int \fIout\fP[])\fR
+.HP
+\fBint nc_put_att_int64(int \fIncid\fP, int \fIvarid\fP, const char \fIname\fP[], nc_type \fIxtype\fP, size_t \fIlen\fP, const long long \fIout\fP[])\fR
+.HP
+\fBint nc_put_att_uint64(int \fIncid\fP, int \fIvarid\fP, const char \fIname\fP[], nc_type \fIxtype\fP, size_t \fIlen\fP, const unsigned long long \fIout\fP[])\fR
+.HP
+\fBint nc_put_att_string(int \fIncid\fP, int \fIvarid\fP, const char \fIname\fP[], nc_type \fIxtype\fP, size_t \fIlen\fP, const char * \fIout\fP[])\fR
+
+
+.HP
+\fBint nc_put_att(int \fIncid\fP, int \fIvarid\fP, const char \fIname\fP[], nc_type \fIxtype\fP, size_t \fIlen\fP, void * \fIip\fP)\fR
+.HP
+\fBint nc_get_att(int \fIncid\fP, int \fIvarid\fP, const char \fIname\fP[], void ** \fIip\fP)\fR
+.sp
+Unlike variables, attributes do not have
+separate functions for defining and writing values.
+This family of functions defines a new attribute with a value or changes
+the value of an existing attribute.
+If the attribute is new, or if the space required to
+store the attribute value is greater than before,
+the netCDF dataset must be in define mode.
+The parameter \fIlen\fP is the number of values from \fIout\fP to transfer.
+It is often one, except that for
+\fBnc_put_att_text(\|)\fR it will usually be
+\fBstrlen(\fIout\fP)\fR.
+.sp
+For these functions, the type component of the function name refers to
+the in-memory type of the value, whereas the \fIxtype\fP argument refers to the
+external type for storing the value.  An \fBNC_ERANGE\fR
+error results if
+a conversion between these types is not possible.  In this case the value
+is represented with the appropriate fill-value for the associated
+external type.
+.HP
+\fBint nc_inq_attname(int \fIncid\fP, int \fIvarid\fP, int \fIattnum\fP, char \fIname\fP[])\fR
+.sp
+Gets the
+name of an attribute, given its variable ID and attribute number.
+This function is useful in generic applications that
+need to get the names of all the attributes associated with a variable,
+since attributes are accessed by name rather than number in all other
+attribute functions.  The number of an attribute is more volatile than
+the name, since it can change when other attributes of the same variable
+are deleted.  The attributes for each variable are numbered
+from 0 (the first attribute) to
+\fInvatts\fP-1,
+where \fInvatts\fP is
+the number of attributes for the variable, as returned from a call to
+\fBnc_inq_varnatts(\|)\fR.
+If the \fIname\fP parameter is a \fBNULL\fR pointer, no name will be
+returned and no space need be allocated.
+.HP
+\fBint nc_inq_att(int \fIncid\fP, int \fIvarid\fP, const char \fIname\fP[], nc_type* \fIxtype\fP, size_t* \fIlen\fP)\fR
+.HP
+\fBint nc_inq_attid(int \fIncid\fP, int \fIvarid\fP, const char \fIname\fP[], int* \fIattnum\fP)\fR
+.HP
+\fBint nc_inq_atttype(int \fIncid\fP, int \fIvarid\fP, const char \fIname\fP[], nc_type* \fIxtype\fP)\fR
+.HP
+\fBint nc_inq_attlen(int \fIncid\fP, int \fIvarid\fP, const char \fIname\fP[], size_t* \fIlen\fP)\fR
+.sp
+These functions return information about a netCDF attribute,
+given its variable ID and name.  The information returned is the
+external type in \fIxtype\fP
+and the number of elements in the attribute as \fIlen\fP.
+If any of the return arguments is a \fBNULL\fR pointer,
+the specified information will not be returned.
+.HP
+\fBint nc_copy_att(int \fIncid\fP, int \fIvarid_in\fP, const char \fIname\fP[], int \fIncid_out\fP, int \fIvarid_out\fP)\fR
+.sp
+Copies an
+attribute from one netCDF dataset to another.  It can also be used to
+copy an attribute from one variable to another within the same netCDF.
+\fIncid_in\fP is the netCDF ID of an input netCDF dataset from which the
+attribute will be copied.
+\fIvarid_in\fP
+is the ID of the variable in the input netCDF dataset from which the
+attribute will be copied, or \fBNC_GLOBAL\fR
+for a global attribute.
+\fIname\fP
+is the name of the attribute in the input netCDF dataset to be copied.
+\fIncid_out\fP
+is the netCDF ID of the output netCDF dataset to which the attribute will be
+copied.
+It is permissible for the input and output netCDF ID's to be the same.  The
+output netCDF dataset should be in define mode if the attribute to be
+copied does not already exist for the target variable, or if it would
+cause an existing target attribute to grow.
+\fIvarid_out\fP
+is the ID of the variable in the output netCDF dataset to which the attribute will
+be copied, or \fBNC_GLOBAL\fR to copy to a global attribute.
+.HP
+\fBint nc_rename_att(int \fIncid\fP, int \fIvarid\fP, const char \fIname\fP[], const char \fInewname\fP[])\fR
+.sp
+Changes the
+name of an attribute.  If the new name is longer than the original name,
+the netCDF must be in define mode.  You cannot rename an attribute to
+have the same name as another attribute of the same variable.
+\fIname\fP is the original attribute name.
+\fInewname\fP
+is the new name to be assigned to the specified attribute.  If the new name
+is longer than the old name, the netCDF dataset must be in define mode.
+.HP
+\fBint nc_del_att(int \fIncid\fP, int \fIvarid\fP, const char \fIname\fP[])\fR
+.sp
+Deletes an attribute from a netCDF dataset.  The dataset must be in
+define mode.
+.HP
+\fBint nc_get_att_text(int \fIncid\fP, int \fIvarid\fP, const char \fIname\fP[], char \fIin\fP[])\fR
+.HP
+\fBint nc_get_att_uchar(int \fIncid\fP, int \fIvarid\fP, const char \fIname\fP[], unsigned char \fIin\fP[])\fR
+.HP
+\fBint nc_get_att_schar(int \fIncid\fP, int \fIvarid\fP, const char \fIname\fP[], signed char \fIin\fP[])\fR
+.HP
+\fBint nc_get_att_short(int \fIncid\fP, int \fIvarid\fP, const char \fIname\fP[], short \fIin\fP[])\fR
+.HP
+\fBint nc_get_att_int(int \fIncid\fP, int \fIvarid\fP, const char \fIname\fP[], int \fIin\fP[])\fR
+.HP
+\fBint nc_get_att_long(int \fIncid\fP, int \fIvarid\fP, const char \fIname\fP[], long \fIin\fP[])\fR
+.HP
+\fBint nc_get_att_float(int \fIncid\fP, int \fIvarid\fP, const char \fIname\fP[], float \fIin\fP[])\fR
+.HP
+\fBint nc_get_att_double(int \fIncid\fP, int \fIvarid\fP, const char \fIname\fP[], double \fIin\fP[])\fR
+.HP
+\fBint nc_get_att_ubyte(int \fIncid\fP, int \fIvarid\fP, const char \fIname\fP[], unsigned char \fIin\fP[])\fR
+.HP
+\fBint nc_get_att_ushort(int \fIncid\fP, int \fIvarid\fP, const char \fIname\fP[], unsigned short \fIin\fP[])\fR
+.HP
+\fBint nc_get_att_uint(int \fIncid\fP, int \fIvarid\fP, const char \fIname\fP[], unsigned int \fIin\fP[])\fR
+.HP
+\fBint nc_get_att_int64(int \fIncid\fP, int \fIvarid\fP, const char \fIname\fP[], long long \fIin\fP[])\fR
+.HP
+\fBint nc_get_att_uint64(int \fIncid\fP, int \fIvarid\fP, const char \fIname\fP[], unsigned long long \fIin\fP[])\fR
+.HP
+\fBint nc_get_att_string(int \fIncid\fP, int \fIvarid\fP, const char \fIname\fP[], char * \fIin\fP[])\fR
+
+
+.sp
+Gets the value(s) of a netCDF attribute, given its
+variable ID and name.  Converts from the external type to the type
+specified in
+the function name, if possible, otherwise returns an \fBNC_ERANGE\fR
+error.
+All elements of the vector of attribute
+values are returned, so you must allocate enough space to hold
+them.  If you don't know how much space to reserve, call
+\fBnc_inq_attlen(\|)\fR
+first to find out the length of the attribute.
+.SH "COMMON ARGUMENT DESCRIPTIONS"
+.LP
+In this section we define some common arguments which are used in the
+"FUNCTION DESCRIPTIONS" section.
+.TP
+int \fIncid\fP
+is the netCDF ID returned from a previous, successful call to
+\fBnc_open(\|)\fR or \fBnc_create(\|)\fR
+.TP
+char \fIname\fP[]
+is the name of a dimension, variable, or attribute. The names of
+dimensions, variables and attributes consist of arbitrary
+sequences of alphanumeric characters (as well as underscore '_',
+period '.' and hyphen '-'), beginning with a letter or
+underscore. (However names commencing with underscore are reserved for
+system use.) Case is significant in netCDF names. A zero-length name
+is not allowed.
+As an input argument,
+it shall be a pointer to a 0-terminated string; as an output argument, it
+shall be the address of a buffer in which to hold such a string.
+The maximum allowable number of characters
+(excluding the terminating 0) is \fBNC_MAX_NAME\fR.
+.TP
+nc_type \fIxtype\fP
+specifies the external data type of a netCDF variable or attribute and
+is one of the following:
+\fBNC_BYTE\fR, \fBNC_CHAR\fR, \fBNC_SHORT\fR, \fBNC_INT\fR,
+\fBNC_FLOAT\fR, or \fBNC_DOUBLE\fR.
+These are used to specify 8-bit integers,
+characters, 16-bit integers, 32-bit integers, 32-bit IEEE floating point
+numbers, and 64-bit IEEE floating-point numbers, respectively.
+(\fBNC_INT\fR corresponds to \fBNC_LONG\fR in version 2, to specify a
+32-bit integer).
+.TP
+int \fIdimids\fP[]
+is a vector of dimension ID's and defines the shape of a netCDF variable.
+The size of the vector shall be greater than or equal to the
+rank (i.e. the number of dimensions) of the variable (\fIndims\fP).
+The vector shall be ordered by the speed with which a dimension varies:
+\fIdimids\fP[\fIndims\fP-1]
+shall be the dimension ID of the most rapidly
+varying dimension and
+\fIdimids\fP[0]
+shall be the dimension ID of the most slowly
+varying dimension.
+The maximum possible number of
+dimensions for a variable is given by the symbolic constant
+\fBNC_MAX_VAR_DIMS\fR.
+.TP
+int \fIdimid\fP
+is the ID of a netCDF dimension.
+netCDF dimension ID's are allocated sequentially from the
+non-negative
+integers beginning with 0.
+.TP
+int \fIndims\fP
+is either the total number of dimensions in a netCDF dataset or the rank
+(i.e. the number of dimensions) of a netCDF variable.
+The value shall not be negative or greater than the symbolic constant
+\fBNC_MAX_VAR_DIMS\fR.
+.TP
+int \fIvarid\fP
+is the ID of a netCDF variable or (for the attribute-access functions)
+the symbolic constant
+\fBNC_GLOBAL\fR,
+which is used to reference global attributes.
+netCDF variable ID's are allocated sequentially from the
+non-negative
+integers beginning with 0.
+.TP
+int* \fInatts\fP
+is the number of global attributes in a netCDF dataset  for the
+\fBnc_inquire(\|)\fR
+function or the number
+of attributes associated with a netCDF variable for the
+\fBnc_varinq(\|)\fR
+function.
+.TP
+const size_t \fIindex\fP[]
+specifies the indicial coordinates of the netCDF data value to be accessed.
+The indices start at 0;
+thus, for example, the first data value of a
+two-dimensional variable is (0,0).
+The size of the vector shall be at least the rank of the associated
+netCDF variable and its elements shall correspond, in order, to the
+variable's dimensions.
+.TP
+const size_t \fIstart\fP[]
+specifies the starting point
+for accessing a netCDF variable's data values
+in terms of the indicial coordinates of
+the corner of the array section.
+The indices start at 0;
+thus, the first data
+value of a variable is (0, 0, ..., 0).
+The size of the vector shall be at least the rank of the associated
+netCDF variable and its elements shall correspond, in order, to the
+variable's dimensions.
+.TP
+const size_t \fIcount\fP[]
+specifies the number of indices selected along each dimension of the
+array section.
+Thus, to access a single value, for example, specify \fIcount\fP as
+(1, 1, ..., 1).
+Note that, for strided I/O, this argument must be adjusted
+to be compatible with the \fIstride\fP and \fIstart\fP arguments so that
+the interaction of the
+three does not attempt to access an invalid data co-ordinate.
+The elements of the
+\fIcount\fP vector correspond, in order, to the variable's dimensions.
+.TP
+const size_t \fIstride\fP[]
+specifies the sampling interval along each dimension of the netCDF
+variable.   The elements of the stride vector correspond, in order,
+to the netCDF variable's dimensions (\fIstride\fP[0])
+gives the sampling interval along the most slowly
+varying dimension of the netCDF variable).  Sampling intervals are
+specified in type-independent units of elements (a value of 1 selects
+consecutive elements of the netCDF variable along the corresponding
+dimension, a value of 2 selects every other element, etc.).
+A \fBNULL\fR stride argument is treated as (1, 1, ... , 1).
+.TP
+\fIimap\fP
+specifies the mapping between the dimensions of a netCDF variable and
+the in-memory structure of the internal data array.  The elements of
+the index mapping vector correspond, in order, to the netCDF variable's
+dimensions (\fIimap\fP[0] gives the distance
+between elements of the internal array corresponding to the most
+slowly varying dimension of the netCDF variable).
+Distances between elements are specified in type-independent units of
+elements (the distance between internal elements that occupy adjacent
+memory locations is 1 and not the element's byte-length as in netCDF 2).
+A \fBNULL\fR pointer means the memory-resident values have
+the same structure as the associated netCDF variable.
+.SH "VARIABLE PREFILLING"
+.LP
+By default, the netCDF interface sets the values of
+all newly-defined variables of finite length (i.e. those that do not have
+an unlimited, dimension) to the type-dependent fill-value associated with each
+variable.  This is done when \fBnc_enddef(\|)\fR
+is called.  The
+fill-value for a variable may be changed from the default value by
+defining the attribute `\fB_FillValue\fR' for the variable.  This
+attribute must have the same type as the variable and be of length one.
+.LP
+Variables with an unlimited dimension are also prefilled, but on
+an `as needed' basis.  For example, if the first write of such a
+variable is to position 5, then
+positions
+0 through 4
+(and no others)
+would be set to the fill-value at the same time.
+.LP
+This default prefilling of data values may be disabled by
+or'ing the
+\fBNC_NOFILL\fR
+flag into the mode parameter of \fBnc_open(\|)\fR or \fBnc_create(\|)\fR,
+or, by calling the function \fBnc_set_fill(\|)\fR
+with the argument \fBNC_NOFILL\fR.
+For variables that do not use the unlimited dimension,
+this call must
+be made before
+\fBnc_enddef(\|)\fR.
+For variables that
+use the unlimited dimension, this call
+may be made at any time.
+.LP
+One can obtain increased performance of the netCDF interface by using
+this feature, but only at the expense of requiring the application to set
+every single data value.  The performance
+enhancing behavior of this function is dependent on the particulars of
+the implementation and dataset format.
+The flag value controlled by \fBnc_set_fill(\|)\fR
+is per netCDF ID,
+not per variable or per write.
+Allowing this to change affects the degree to which
+a program can be effectively parallelized.
+Given all of this, we state that the use
+of this feature may not be available (or even needed) in future
+releases. Programmers are cautioned against heavy reliance upon this
+feature.
+.HP
+\fBint nc_setfill(int \fIncid\fP, int \fIfillmode\fP, int* \fIold_fillemode\fP)\fR
+.sp
+(Corresponds to \fBncsetfill(\|)\fR in version 2)
+.sp
+Determines whether or not variable prefilling will be done (see
+above).
+The netCDF dataset shall be writable.
+\fIfillmode\fP is either \fBNC_FILL\fR
+to enable prefilling (the
+default) or \fBNC_NOFILL\fR
+to disable prefilling.
+This function returns the previous setting in \fIold_fillmode\fP.
+
+.HP
+.SH "MPP FUNCTION DESCRIPTIONS"
+.LP
+Additional functions for use on SGI/Cray MPP machines (_CRAYMPP).
+These are used to set and inquire which PE is the base for MPP
+for a particular netCDF. These are only relevant when
+using the SGI/Cray ``global''
+Flexible File I/O layer and desire to have
+only a subset of PEs to open the specific netCDF file.
+For technical reasons, these functions are available on all platforms.
+On a platform other than SGI/Cray MPP, it is as if
+only processor available were processor 0.
+.LP
+To use this feature, you need to specify a communicator group and call
+\fBglio_group_mpi(\|)\fR or \fBglio_group_shmem(\|)\fR prior to the netCDF
+\fBnc_open(\|)\fR and \fBnc_create(\|)\fR calls.
+.HP
+\fBint nc__create_mp(const char \fIpath\fP[], int \fIcmode\fP, size_t \fIinitialsize\fP, int \fIpe\fP, size_t* \fIchunksize\fP, int* \fIncid\fP)\fR
+.sp
+Like \fBnc__create(\|)\fR but allows the base PE to be set.
+.sp
+The argument \fIpe\fP sets the base PE at creation time. In the MPP
+environment, \fBnc__create(\|)\fR and \fBnc_create(\|)\fR set the base PE to processor
+zero by default.
+.HP
+\fBint nc__open_mp(const char \fIpath\fP[], int \fImode\fP, int \fIpe\fP, size_t* \fIchunksize\fP, int* \fIncid\fP)\fR
+.sp
+Like \fBnc__open(\|)\fR but allows the base PE to be set.
+The argument \fIpe\fP sets the base PE at creation time. In the MPP
+environment, \fBnc__open(\|)\fR and \fBnc_open(\|)\fR set the base PE to processor
+zero by default.
+.HP
+\fBint nc_inq_base_pe(int \fIncid\fP, int* \fIpe\fP)\fR
+.sp
+Inquires of the netCDF dataset which PE is being used as the base for MPP use.
+This is safe to use at any time.
+.HP
+\fBint nc_set_base_pe(int \fIncid\fP, int \fIpe\fP)\fR
+.sp
+Resets the base PE for the netCDF dataset.
+Only perform this operation when the affected communicator group
+synchronizes before and after the call.
+This operation is very risky and should only be contemplated
+under only the most extreme cases.
+.SH "ENVIRONMENT VARIABLES"
+.TP 4
+.B NETCDF_FFIOSPEC
+Specifies the Flexible File I/O buffers for netCDF I/O when executing
+under the UNICOS operating system (the variable is ignored on other
+operating systems).
+An appropriate specification can greatly increase the efficiency of
+netCDF I/O -- to the extent that it can actually surpass FORTRAN binary
+I/O.
+This environment variable has been made a little more generalized,
+such that other FFIO option specifications can now be added.
+The default specification is \fBbufa:336:2\fP,
+unless a current FFIO specification is in operation,
+which will be honored.
+See UNICOS Flexible File I/O for more information.
+.SH "MAILING-LISTS"
+.LP
+Both a mailing list and a digest are available for
+discussion of the netCDF interface and announcements about netCDF bugs,
+fixes, and enhancements.
+To begin or change your subscription to either the mailing-list or the
+digest, send one of the following in the body (not
+the subject line) of an email message to "majordomo@unidata.ucar.edu".
+Use your email address in place of \fIjdoe@host.inst.domain\fP.
+.sp
+To subscribe to the netCDF mailing list:
+.RS
+\fBsubscribe netcdfgroup \fIjdoe@host.inst.domain\fR
+.RE
+To unsubscribe from the netCDF mailing list:
+.RS
+\fBunsubscribe netcdfgroup \fIjdoe@host.inst.domain\fR
+.RE
+To subscribe to the netCDF digest:
+.RS
+\fBsubscribe netcdfdigest \fIjdoe@host.inst.domain\fR
+.RE
+To unsubscribe from the netCDF digest:
+.RS
+\fBunsubscribe netcdfdigest \fIjdoe@host.inst.domain\fR
+.RE
+To retrieve the general introductory information for the mailing list:
+.RS
+\fBinfo netcdfgroup\fR
+.RE
+To get a synopsis of other majordomo commands:
+.RS
+\fBhelp\fR
+.RE
+.SH "SEE ALSO"
+.LP
+.BR ncdump (1),
+.BR ncgen (1),
+.BR netcdf (3).
+.LP
+\fInetCDF User's Guide\fP, published
+by the Unidata Program Center, University Corporation for Atmospheric
+Research, located in Boulder, Colorado.
+
+NetCDF home page at http:/www.unidata.ucar.edu/netcdf.
diff --git a/privatemodules/nc4/share/man/man3/netcdf_fortran.3 b/privatemodules/nc4/share/man/man3/netcdf_fortran.3
new file mode 100644
index 0000000000000000000000000000000000000000..b420e4c4770bc82b65d84e152dce52168f156ae9
--- /dev/null
+++ b/privatemodules/nc4/share/man/man3/netcdf_fortran.3
@@ -0,0 +1,1370 @@
+.nr yr \n(yr+1900
+.af mo 01
+.af dy 01
+.TH NETCDF 3 "1997-04-18" "Printed: \n(yr-\n(mo-\n(dy" "UNIDATA LIBRARY FUNCTIONS"
+.SH NAME
+netcdf \- Unidata's Network Common Data Form (netCDF) library interface
+.SH SYNOPSIS
+.ft B
+.na
+.nh
+include netcdf.inc
+.sp
+.SS Most Systems:
+f77 ...  \-lnetcdf \-lhdf5_hl \-lhdf5 \-lz \-lm
+.sp
+.SS CRAY PVP Systems:
+f90 \-dp \-i64 ... \-lnetcdf
+
+.ad
+.hy
+Complete documentation for the netCDF libraries can be found at the netCDF website: http://www.unidata.ucar.edu/software/netcdf/.
+.sp
+.SH "LIBRARY VERSION"
+.LP
+This document describes versions 3 and 4
+of Unidata netCDF data-access interface
+for the FORTRAN programming language.
+.HP
+\fBcharacter*80 nf_inq_libvers(void)\fR
+.sp
+Returns a string identifying the version of the netCDF library, and
+when it was built, like: "3.1a of Aug 22 1996 12:57:47 $".
+.LP
+The RCS \fBident(1)\fP command will find a string like
+"$\|Id: @\|(#) netcdf library version 3.1a of Sep  6 1996 15:56:26 $"
+in the library. The SCCS \fBwhat(1)\fP command will find a string like
+"netcdf library version 3.1a of Aug 23 1996 16:07:40 $".
+.SH "RETURN VALUES"
+.LP
+All netCDF functions (except
+\fBnf_inq_libvers(\|)\fR and \fBnf_strerror(\|)\fR) return an integer status.
+
+If this returned status value is not equal to
+\fBNF_NOERR\fR (zero), it
+indicates that an error occurred. The possible status values are defined in 
+netcdf.inc.
+.HP
+\fBcharacter*80 nf_strerror(integer \fIstatus\fP)\fR
+.sp
+Returns a string textual translation of the \fIstatus\fP
+value, like "Attribute or variable name contains illegal characters"
+or "No such file or directory".
+.sp
+.SH "FILE OPERATIONS"
+.LP
+.HP
+\fBinteger function nf_create(character*(*) \fIpath\fP, integer \fIcmode\fP, integer \fIncid\fP)\fR
+.sp
+Creates a new netCDF dataset at \fIpath\fP,
+returning a netCDF ID in \fIncid\fP.
+The argument \fIcmode\fP may include the bitwise-or
+of the following flags:
+\fBNF_NOCLOBBER\fR
+to protect existing datasets (default
+silently blows them away),
+\fBNF_SHARE\fR
+for synchronous dataset updates for classic format files
+(default is to buffer accesses),
+.sp
+When a netCDF dataset is created, is is opened
+\fBNF_WRITE\fR.
+The new netCDF dataset is in define mode.
+\fBNF_64BIT_OFFSET\fR.
+to create a file in the 64-bit offset format 
+(as opposed to classic format, the default). 
+\fBNF_TRUE\fR to create a netCDF-4/HDF5 file, 
+and \fBNF_CLASSIC_MODEL\fR to guarantee that netCDF-4/HDF5 files maintain compatibility 
+with the netCDF classic data model.
+.HP
+\fBinteger function nf__create(character*(*) \fIpath\fP, integer \fIcmode\fP, integer \fIinitialsize\fP, integer \fIchunksize\fP, integer \fIncid\fP)\fR
+.sp
+Like \fBnf_create(\|)\fR but has additional performance tuning parameters.
+.sp
+The argument \fIinitialsize\fP sets the initial size of the file at
+creation time.
+.sp
+See \fBnf__open(\|)\fR below for an explanation of the \fIchunksize\fP
+parameter.
+.HP
+\fBinteger function nf_open(character*(*) \fIpath\fP, integer \fImode\fP, integer \fIncid\fP)\fR
+.sp
+(Corresponds to \fBncopn(\|)\fR in version 2)
+.sp
+Opens a existing netCDF dataset at \fIpath\fP
+returning a netCDF ID
+in \fIncid\fP.
+The type of access is described by the \fImode\fP parameter,
+which may include the bitwise-or
+of the following flags:
+\fBNF_WRITE\fR
+for read-write access (default
+read-only),
+\fBNF_SHARE\fR
+for synchronous dataset updates (default is
+to buffer accesses), and
+\fBNF_LOCK\fR
+(not yet implemented).
+.sp
+As of NetCDF version 4.1, and if TRUE support was enabled
+when the NetCDF library was built, the path parameter
+may specify a TRUE URL. In this case, the access mode is
+forced to be read-only.
+.HP
+\fBinteger function nf__open(character*(*) \fIpath\fP, integer \fImode\fP, integer \fIchunksize\fP, integer \fIncid\fP)\fR
+.sp
+Like \fBnf_open(\|)\fR but has an additional performance tuning parameter.
+.sp
+The argument referenced by \fIchunksize\fP controls a space versus time
+tradeoff, memory allocated in the netcdf library versus number of system
+calls.
+Because of internal requirements, the value may not be set to exactly
+the value requested.
+The actual value chosen is returned by reference.
+Using the value \fBNF_SIZEHINT_DEFAULT\fR causes the library to choose a
+default.
+How the system choses the default depends on the system.
+On many systems, the "preferred I/O block size" is available from the 
+\fBstat()\fR system call, \fBstruct stat\fR member \fBst_blksize\fR.
+If this is available it is used. Lacking that, twice the system pagesize
+is used.
+Lacking a call to discover the system pagesize, we just set default
+chunksize to 8192.
+.sp
+The chunksize is a property of a given open netcdf descriptor
+\fIncid\fP, it is not a persistent property of the netcdf dataset.
+.sp
+As with \fBnf__open(\|)\fR, the path parameter
+may specify a TRUE URL, but the tuning parameters are ignored.
+.HP
+\fBinteger function nf_redef(integer \fIncid\fP)\fR
+.sp
+(Corresponds to \fBncredf(\|)\fR in version 2)
+.sp
+Puts an open netCDF dataset into define mode, 
+so dimensions, variables, and attributes can be added or renamed and 
+attributes can be deleted.
+.HP
+\fBinteger function nf_enddef(integer \fIncid\fP)\fR
+.sp
+(Corresponds to \fBncendf(\|)\fR in version 2)
+.sp
+Takes an open netCDF dataset out of define mode.
+The changes made to the netCDF dataset
+while it was in define mode are checked and committed to disk if no
+problems occurred.  Some data values may be written as well,
+see "VARIABLE PREFILLING" below.
+After a successful call, variable data can be read or written to the dataset.
+.HP
+\fBinteger function nf__enddef(integer \fIncid\fP, integer \fIh_minfree\fP, integer \fIv_align\fP, integer \fIv_minfree\fP, integer \fIr_align\fP)\fR
+.sp
+Like \fBnf_enddef(\|)\fR but has additional performance tuning parameters.
+.sp
+Caution: this function exposes internals of the netcdf version 1 file
+format.
+It may not be available on future netcdf implementations.
+.sp
+The current netcdf file format has three sections,
+the "header" section, the data section for fixed size variables, and
+the data section for variables which have an unlimited dimension (record
+variables).
+The header begins at the beginning of the file. The index
+(offset) of the beginning of the other two sections is contained in the
+header. Typically, there is no space between the sections. This causes
+copying overhead to accrue if one wishes to change the size of the
+sections,
+as may happen when changing names of things, text attribute values,
+adding
+attributes or adding variables. Also, for buffered i/o, there may be
+advantages
+to aligning sections in certain ways.
+.sp
+The minfree parameters allow one to control costs of future calls
+to \fBnf_redef(\|)\fR, \fBnf_enddef(\|)\fR by requesting that \fIminfree\fP bytes be
+available at the end of the section.
+The \fIh_minfree\fP parameter sets the pad
+at the end of the "header" section. The \fIv_minfree\fP parameter sets
+the pad at the end of the data section for fixed size variables.
+.sp
+The align parameters allow one to set the alignment of the beginning of
+the corresponding sections. The beginning of the section is rounded up
+to an index which is a multiple of the align parameter. The flag value
+\fBNF_ALIGN_CHUNK\fR tells the library to use the chunksize (see above)
+as the align parameter.
+The \fIv_align\fP parameter controls the alignment of the beginning of
+the data section for fixed size variables.
+The \fIr_align\fP parameter controls the alignment of the beginning of
+the data section for variables which have an unlimited dimension (record
+variables).
+.sp
+The file format requires mod 4 alignment, so the align parameters
+are silently rounded up to multiples of 4. The usual call,
+\fBnf_enddef(\fIncid\fP)\fR
+is equivalent to
+\fBnf__enddef(\fIncid\fP, 0, 4, 0, 4)\fR.
+.sp
+The file format does not contain a "record size" value, this is
+calculated from the sizes of the record variables. This unfortunate fact
+prevents us from providing minfree and alignment control of the
+"records"
+in a netcdf file. If you add a variable which has an unlimited
+dimension,
+the third section will always be copied with the new variable added.
+.HP
+\fBinteger function nf_sync(integer \fIncid\fP)\fR
+.sp
+(Corresponds to \fBncsnc(\|)\fR in version 2)
+.sp
+Unless the
+\fBNF_SHARE\fR
+bit is set in
+\fBnf_open(\|)\fR or \fBnf_create(\|)\fR,
+accesses to the underlying netCDF dataset are
+buffered by the library. This function synchronizes the state of
+the underlying dataset and the library.
+This is done automatically by
+\fBnf_close(\|)\fR and \fBnf_enddef(\|)\fR.
+.HP
+\fBinteger function nf_abort(integer \fIncid\fP)\fR
+.sp
+(Corresponds to \fBncabor(\|)\fR in version 2)
+.sp
+You don't need to call this function.
+This function is called automatically by
+\fBnf_close(\|)\fR
+if the netCDF was in define mode and something goes wrong with the commit.
+If the netCDF dataset isn't in define mode, then this function is equivalent to
+\fBnf_close(\|)\fR.
+If it is called after
+\fBnf_redef(\|)\fR,
+but before
+\fBnf_enddef(\|)\fR,
+the new definitions are not committed and the dataset is closed.
+If it is called after
+\fBnf_create(\|)\fR
+but before
+\fBnf_enddef(\|)\fR,
+the dataset disappears.
+.HP
+\fBinteger function nf_close(integer \fIncid\fP)\fR
+.sp
+(Corresponds to
+\fBncclos(\|)\fR in version 2)
+.sp
+Closes an open netCDF dataset.
+If the dataset is in define mode,
+\fBnf_enddef(\|)\fR
+will be called before closing.
+After a dataset is closed, its ID may be reassigned to another dataset.
+.HP
+\fBinteger function nf_inq(integer \fIncid\fP, integer \fIndims\fP, integer \fInvars\fP,
+integer \fInatts\fP, integer \fIunlimdimid\fP)\fR
+.HP
+\fBinteger function nf_inq_ndims(integer \fIncid\fP, integer \fIndims\fP)\fR
+.HP
+\fBinteger function nf_inq_nvars(integer \fIncid\fP, integer \fInvars\fP)\fR
+.HP
+\fBinteger function nf_inq_natts(integer \fIncid\fP, integer \fInatts\fP)\fR
+.HP
+\fBinteger function nf_inq_unlimdim(integer \fIncid\fP, integer \fIunlimdimid\fP)\fR
+.HP
+\fBinteger function nf_inq_format(integer \fIncid\fP, integer \fIformatn\fP)\fR
+.sp
+Use these functions to find out what is in a netCDF dataset.
+Upon successful return,
+\fIndims\fP will contain  the
+number of dimensions defined for this netCDF dataset,
+\fInvars\fP will contain the number of variables,
+\fInatts\fP will contain the number of attributes, and
+\fIunlimdimid\fP will contain the
+dimension ID of the unlimited dimension if one exists, or
+0 otherwise.
+\fIformatn\fP will contain the version number of the dataset <format>, one of
+\fBNF_FORMAT_CLASSIC\fR, \fBNF_FORMAT_64BIT\fR, \fBNF_FORMAT_NETCDF4\fR, or
+\fBNF_FORMAT_NETCDF4_CLASSIC\fR.
+
+.HP
+\fBinteger function nf_def_dim(integer \fIncid\fP, character*(*) \fIname\fP, integer \fIlen\fP, integer \fIdimid\fP)\fR
+.sp
+(Corresponds to \fBncddef(\|)\fR in version 2)
+.sp
+Adds a new dimension to an open netCDF dataset, which must be 
+in define mode.
+\fIname\fP is the dimension name.
+\fIdimid\fP will contain the dimension ID of the newly created dimension.
+
+.SH "USER DEFINED TYPES"
+.LP
+Users many define types for a netCDF-4/HDF5 file (unless the
+\fBNF_CLASSIC_MODEL\fR was used when the file was creates). Users may
+define compound types, variable length arrays, enumeration types, and
+opaque types.
+.sp
+
+.HP
+\fBinteger function nf_def_compound(integer \fIncid\fP, integer \fIsize\fP, character*(*) \fIname\fP, integer \fItypeidp\fP)\fR
+.sp
+Define a compound type.
+.HP
+\fBinteger function nf_insert_compound(integer \fIncid\fP, integer \fI\fP, character*(*) \fIname\fP, integer \fIoffset\fP, integer \fIfield_typeid\fP)\fR
+.sp
+Insert an element into a compound type. May not be done after type has been used, or after the type has been written by an enddef.
+.HP
+\fBinteger function nf_insert_array_compound(integer \fIncid\fP, integer \fI\fP, character*(*) \fIname\fP, integer \fIoffset\fP, integer \fIfield_typeid\fP, integer \fIndims\fP, integer \fIdim_sizes\fP(1))\fR
+.sp 
+Insert an array into a compound type.
+.HP
+\fBinteger function nf_inq_type(integer \fIncid\fP, integer \fI\fP, character*(*) \fIname\fP, integer \fIsizep\fP)\fR
+.sp
+Learn about a type.
+.HP
+\fBinteger function nf_inq_compound(integer \fIncid\fP, integer \fI\fP, character*(*) \fIname\fP, integer \fIsizep\fP, integer \fInfieldsp\fP)\fR
+.HP
+\fBinteger function nf_inq_compound_name(integer \fIncid\fP, integer \fI\fP, character*(*) \fIname\fP)\fR
+.HP
+\fBinteger function nf_inq_compound_size(integer \fIncid\fP, integer \fI\fP, integer \fIsizep\fP)\fR
+.HP
+\fBinteger function nf_inq_compound_nfields(integer \fIncid\fP, integer \fI\fP, integer \fInfieldsp\fP)\fR
+.HP
+\fBinteger function nf_inq_compound_fieldname(integer \fIncid\fP, integer \fI\fP, integer \fIfieldid\fP, character*(*) \fIname\fP)\fR
+.HP
+\fBinteger function nf_inq_compound_fieldindex(integer \fIncid\fP, integer \fI\fP, character*(*) \fIname\fP, integer \fIfieldidp\fP)\fR
+.HP
+\fBinteger function nf_inq_compound_fieldoffset(integer \fIncid\fP, integer \fI\fP, integer \fIfieldid\fP, integer \fIoffsetp\fP)\fR
+.HP
+\fBinteger function nf_inq_compound_fieldtype(integer \fIncid\fP, integer \fI\fP, integer \fIfieldid\fP, integer \fIfield_typeid\fP)\fR
+.HP
+\fBinteger function nf_inq_compound_fieldndims(integer \fIncid\fP, integer \fI\fP, integer \fIfieldid\fP, integer \fIndims\fP)\fR
+.HP
+\fBinteger function nf_inq_compound_fielddim_sizes(integer \fIncid\fP, integer \fI\fP, integer \fIfieldid\fP, integer \fIdim_sizes\fP(1))\fR
+.sp
+Learn about a compound type.
+.HP
+\fBinteger function nf_def_vlen(integer \fIncid\fP, character*(*) \fIname\fP, integer \fIbase_typeid\fP, integer \fIxtypep\fP)\fR
+.sp
+Create a varaible length array type.
+.HP
+\fBinteger function nf_inq_vlen(integer \fIncid\fP, integer \fI\fP, character*(*) \fIname\fP, integer \fIdatum_sizep\fP, integer \fIbase_nc_typep\fP)\fR
+.sp
+Learn about a varaible length array type.
+.HP
+\fBinteger function nf_free_vlen(nc_vlen_t *vl)\fR
+.sp
+Free memory comsumed by reading data of a varaible length array type.
+.HP
+\fBinteger function nf_put_vlen_element(integer \fIncid\fP, integer \fI\fP, void * \fIvlen_element\fP, integer \fIlen\fP, void * \fIdata\fP)\fR
+.sp
+Write one VLEN.
+.HP
+\fBinteger function nf_get_vlen_element(integer \fIncid\fP, integer \fI\fP, void * \fIvlen_element\fP, integer \fIlen\fP, void * \fIdata\fP)\fR
+.sp
+Read one VLEN.
+.HP
+\fBinteger function nf_free_string(integer \fIlen\fP, char **data)\fR
+.sp
+Free memory comsumed by reading data of a string type.
+.HP
+\fBinteger function nf_inq_user_type(integer \fIncid\fP, integer \fI\fP, character*(*) \fIname\fP, integer \fI\fP, integer \fI\fP, integer \fI\fP, integer \fI\fP)\fR
+.sp
+Learn about a user define type.
+.HP
+\fBinteger function nf_def_enum(integer \fIncid\fP, integer \fIbase_typeid\fP, character*(*) \fIname\fP, integer \fItypeidp\fP)\fR
+.sp
+Define an enumeration type.
+.HP
+\fBinteger function nf_insert_enum(integer \fIncid\fP, integer \fIbase_typeid\fP, character*(*) \fIname\fP, const void *value)\fR
+.sp
+Insert a name-value pair into enumeration type.
+.HP
+\fBinteger function nf_inq_enum_member(integer \fIncid\fP, integer \fIxtype\fP, integer \fIidx\fP, character*(*) \fIname\fP, void *value)\fR
+.HP
+\fBinteger function nf_inq_enum_ident(integer \fIncid\fP, integer \fIxtype\fP, integer \fIidx\fP, integer*8 \fIvalue\fP, character*(*) \fIidentifier\fP)\fR
+.sp
+Learn about a name-value pair into enumeration type.
+.HP
+\fBinteger function nf_def_opaque(integer \fIncid\fP, integer \fIsize\fP, character*(*) \fIname\fP, integer \fIxtypep\fP)\fR
+.sp
+Create an opaque type.
+.HP
+\fBinteger function nf_inq_opaque(integer \fIncid\fP, integer \fIxtype\fP, character*(*) \fIname\fP, integer \fIsizep\fP)\fR
+.sp
+Learn about opaque type.
+.HP
+.SH "GROUPS"
+.sp
+Users may organize data into hierarchical groups in netCDF-4/HDF5 files (unless \fBNF_CLASSIC_MODEL\fR was used when creating the file).
+.HP
+\fBinteger function nf_inq_grps(integer \fIncid\fP, integer \fInumgrps\fP, integer \fIncids\fP(1))\fR
+.sp
+Learn how many groups (and their ncids) are available from the group represented by ncid.
+.HP
+\fBinteger function nf_inq_grpname(integer \fIncid\fP, character*(*) \fIname\fP)\fR
+.HP
+\fBinteger function nf_inq_grpname_full(integer \fIncid\fP, integer \fIlen\fP, character*(*) \fIname\fP)\fR
+.HP
+\fBinteger function nf_inq_grpname_len(integer \fIncid\fP, integer \fIlen\fP)\fR
+.HP
+\fBinteger function nf_inq_grp_parent(integer \fIncid\fP, integer \fIncid\fP)\fR
+.HP
+\fBinteger function nf_inq_grp_ncid(integer \fIncid\fP, character*(*) \fIname\fP, integer \fIncid\fP)\fR
+.HP
+\fBinteger function nf_inq_full_ncid(integer \fIncid\fP, character*(*) \fIname\fP, integer \fIncid\fP)\fR
+.sp
+Learn about a group.
+.HP
+\fBinteger function nf_inq_varids(integer \fIncid\fP, integer \fInvars\fP, integer \fI\fP)\fR
+.sp
+Get the varids in a group.
+.HP
+\fBinteger function nf_inq_dimids(integer \fIncid\fP, integer \fIndims\fP, integer \fIdimids\fP, integer \fIinclude_parents\fP)\fR
+.sp
+Get the dimids in a group and (potentially) its parents.
+.HP
+\fBinteger function nf_inq_typeids(integer \fIncid\fP, integer \fIntypes\fP, integer \fItypeids\fP(1))\fR
+.sp
+Get the typeids of user-defined types in a group.
+.HP
+\fBinteger function nf_def_grp(integer \fIncid\fP, character*(*) \fIname\fP, integer \fIncid\fP)\fR
+.sp
+Create a group.
+.LP
+
+.SH "DIMENSIONS"
+.LP
+.HP
+\fBinteger function nf_inq_dimid(integer \fIncid\fP, character*(*) \fIname\fP, integer \fIdimid\fP)\fR
+.sp
+(Corresponds to \fBncdid(\|)\fR in version 2)
+.sp
+Given a dimension name, returns the ID of a netCDF dimension in \fIdimid\fP.
+.HP
+\fBinteger function nf_inq_dim(integer \fIncid\fP, integer \fIdimid\fP, character*(*) \fIname\fP, integer \fIlen\fP)\fR
+.HP
+\fBinteger function nf_inq_dimname(integer \fIncid\fP, integer \fIdimid\fP, character*(*) \fIname\fP)\fR
+.HP
+\fBinteger function nf_inq_dimlen(integer \fIncid\fP, integer \fIdimid\fP, integer \fIlen\fP)\fR
+.sp
+Use these functions to find out about a dimension.
+
+\fIname\fP should be  big enough (\fBNF_MAX_NAME\fR)
+to hold the dimension name as the name will be copied into your storage.
+The length return parameter, \fIlen\fP
+will contain the size of the dimension.
+For the unlimited dimension, the returned length is the current
+maximum value used for writing into any of the variables which use
+the dimension.
+.HP
+\fBinteger function nf_rename_dim(integer \fIncid\fP, integer \fIdimid\fP, character*(*) \fIname\fP)\fR
+.sp
+(Corresponds to \fBncdren(\|)\fR in version 2)
+.sp
+Renames an existing dimension in an open netCDF dataset.
+If the new name is longer than the old name, the netCDF dataset must be in 
+define mode.
+You cannot rename a dimension to have the same name as another dimension.
+.SH "VARIABLES"
+.LP
+.HP
+\fBinteger function nf_def_var(integer \fIncid\fP, character*(*) \fIname\fP, integer \fIxtype\fP, integer \fIndims\fP, integer \fIdimids\fP(1), integer \fIvarid\fP)\fR
+.sp
+(Corresponds to \fBncvdef(\|)\fR in version 2)
+.sp
+Adds a new variable to a netCDF dataset. The netCDF must be in define mode.
+\fIvarid\fP will be set to the netCDF variable ID.
+.HP
+\fBinteger function nf_inq_varid(integer \fIncid\fP, character*(*) \fIname\fP, integer \fIvarid\fP)\fR
+.sp
+(Corresponds to \fBncvid(\|)\fR in version 2)
+.sp
+Returns the ID of a netCDF variable in \fIvarid\fP given its name.
+.HP
+\fBinteger function nf_inq_var(integer \fIncid\fP, integer \fIvarid\fP, character*(*) \fIname\fP, integer \fIxtype\fP, integer \fIndims\fP, integer \fIdimids\fP(1),
+integer \fInatts\fP)\fR
+.HP
+\fBinteger function nf_inq_varname(integer \fIncid\fP, integer \fIvarid\fP, character*(*) \fIname\fP)\fR
+.HP
+\fBinteger function nf_inq_vartype(integer \fIncid\fP, integer \fIvarid\fP, integer \fIxtype\fP)\fR
+.HP
+\fBinteger function nf_inq_varndims(integer \fIncid\fP, integer \fIvarid\fP, integer \fIndims\fP)\fR
+.HP
+\fBinteger function nf_inq_vardimid(integer \fIncid\fP, integer \fIvarid\fP, integer \fIdimids\fP(1))\fR
+.HP
+\fBinteger function nf_inq_varnatts(integer \fIncid\fP, integer \fIvarid\fP, integer \fInatts\fP)\fR
+.sp
+Returns information about a netCDF variable, given its ID.
+
+.HP
+\fBinteger function nf_rename_var(integer \fIncid\fP, integer \fIvarid\fP, character*(*) \fIname\fP)\fR
+.sp
+(Corresponds to \fBncvren(\|)\fR in version 2)
+.sp
+Changes the name of a netCDF variable.
+If the new name is longer than the old name, the netCDF must be in define mode.
+You cannot rename a variable to have the name of any existing variable.
+
+.SH "VARIABLES \fIin\fP NETCDF-4 FILES"
+.LP
+The following functions may only be used on variables in a
+netCDF-4/HDF5 data file. These functions must be called after the
+variable is defined, but before an enddef call.
+.sp
+\fBinteger function nf_def_var_deflate(integer \fIncid\fP, integer \fIvarid\fP, integer \fIshuffle\fP, integer \fIdeflate\fP, integer \fIdeflate_level\fP)\fR
+.sp
+Turn on compression and/or shuffle filter. (Shuffle filter is only useful for integer data.)
+.HP
+\fBinteger function nf_inq_var_deflate(integer \fIncid\fP, integer \fIvarid\fP, integer \fIshufflep\fP, integer \fIdeflatep\fP, integer \fIdeflate_levelp\fP)\fR
+.sp
+Learn about a variable's deflate settings.
+.HP
+\fBinteger function nf_def_var_fletcher32(integer \fIncid\fP, integer \fIvarid\fP, integer \fIfletcher32\fP)\fR
+.sp
+Turn on checksumming for a variable.
+.HP
+\fBinteger function nf_inq_var_fletcher32(integer \fIncid\fP, integer \fIvarid\fP, integer \fIfletcher32\fP)\fR
+.sp
+Learn about checksumming for a variable.
+.HP
+\fBinteger function nf_def_var_chunking(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstorage\fP, integer \fIchunksizesp\fP(1))\fR
+.sp
+Set chunksizes for a variable.
+.HP
+\fBinteger function nf_inq_var_chunking(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstoragep\fP, integer \fIchunksizesp\fP(1))\fR
+.sp
+Learn about chunksizes for a variable.
+.HP
+\fBinteger function nf_def_var_fill(integer \fIncid\fP, integer \fIvarid\fP, integer \fIno_fill\fP, integer \fIchunksizesp\fP(1))\fR
+.sp
+Set a fill value for a variable.
+.HP
+\fBinteger function nf_inq_var_fill(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstoragep\fP, integer \fIchunksizesp\fP(1))\fR
+.sp
+Learn the fill value for a variable.
+.HP
+\fBinteger function nf_def_var_endian(integer \fIncid\fP, integer \fIvarid\fP, integer \fIendian\fP)\fR
+.sp
+Set endianness of variable.
+.HP
+\fBinteger function nf_inq_var_endian(integer \fIncid\fP, integer \fIvarid\fP, integer \fIendianp\fP)\fR
+.sp
+Learn the endianness of a variable.
+.HP
+
+.SH "WRITING AND READING WHOLE VARIABLES"
+.LP
+.HP
+\fBinteger function nf_put_var_text(integer \fIncid\fP, integer \fIvarid\fP, character*(*) \fIout\fP)\fR
+
+.HP
+\fBinteger function nf_put_var_int1(integer \fIncid\fP, integer \fIvarid\fP, integer*1 \fIout\fP(1))\fR
+.HP
+\fBinteger function nf_put_var_int2(integer \fIncid\fP, integer \fIvarid\fP, integer*2 \fIout\fP(1))\fR
+.HP
+\fBinteger function nf_put_var_int(integer \fIncid\fP, integer \fIvarid\fP, integer \fIout\fP(1))\fR
+
+.HP
+\fBinteger function nf_put_var_real(integer \fIncid\fP, integer \fIvarid\fP, real \fIout\fP(1))\fR
+.HP
+\fBinteger function nf_put_var_double(integer \fIncid\fP, integer \fIvarid\fP, doubleprecision \fIout\fP(1))\fR
+.HP
+\fBinteger function nf_put_var_ubyte(integer \fIncid\fP, integer \fIvarid\fP, integer*1 \fIout\fP(1))\fR
+.HP
+\fBinteger function nf_put_var_ushort(integer \fIncid\fP, integer \fIvarid\fP, integer*2 \fIout\fP(1))\fR
+.HP
+\fBinteger function nf_put_var_uint(integer \fIncid\fP, integer \fIvarid\fP, integer*4 \fIout\fP(1))\fR
+.HP
+\fBinteger function nf_put_var_(integer \fIncid\fP, integer \fIvarid\fP, integer*8 \fIout\fP(1))\fR
+.HP
+\fBinteger function nf_put_var_uint64(integer \fIncid\fP, integer \fIvarid\fP, integer*8 \fIout\fP(1))\fR
+.HP
+\fBinteger function nf_put_var_string(integer \fIncid\fP, integer \fIvarid\fP, character* \fIout\fP(1))\fR
+
+
+.sp
+Writes an entire netCDF variable (i.e. all the values).  The netCDF
+dataset must be open and in data mode.  The type of the data is
+specified in the function name, and it is converted to the external
+type of the specified variable, if possible, otherwise an
+\fBNF_ERANGE\fR error is returned. Note that rounding is not performed
+during the conversion. Floating point numbers are truncated when
+converted to integers.
+.HP
+\fBinteger function nf_get_var_text(integer \fIncid\fP, integer \fIvarid\fP, character*(*) \fIin\fP)\fR
+
+.HP
+\fBinteger function nf_get_var_int1(integer \fIncid\fP, integer \fIvarid\fP, integer*1 \fIin\fP(1))\fR
+.HP
+\fBinteger function nf_get_var_int2(integer \fIncid\fP, integer \fIvarid\fP, integer*2 \fIin\fP(1))\fR
+.HP
+\fBinteger function nf_get_var_int(integer \fIncid\fP, integer \fIvarid\fP, integer \fIin\fP(1))\fR
+
+.HP
+\fBinteger function nf_get_var_real(integer \fIncid\fP, integer \fIvarid\fP, real \fIin\fP(1))\fR
+.HP
+\fBinteger function nf_get_var_double(integer \fIncid\fP, integer \fIvarid\fP, doubleprecision \fIin\fP(1))\fR
+.HP
+\fBinteger function nf_get_var_ubyte(integer \fIncid\fP, integer \fIvarid\fP, integer*1 \fIin\fP(1))\fR
+.HP
+\fBinteger function nf_get_var_ushort(integer \fIncid\fP, integer \fIvarid\fP, integer*2 \fIin\fP(1))\fR
+.HP
+\fBinteger function nf_get_var_uint(integer \fIncid\fP, integer \fIvarid\fP, integer*4 \fIin\fP(1))\fR
+.HP
+\fBinteger function nf_get_var_(integer \fIncid\fP, integer \fIvarid\fP, integer*8 \fIin\fP(1))\fR
+.HP
+\fBinteger function nf_get_var_uint64(integer \fIncid\fP, integer \fIvarid\fP, integer*8 \fIin\fP(1))\fR
+.HP
+\fBinteger function nf_get_var_string(integer \fIncid\fP, integer \fIvarid\fP, character* \fIin\fP(1))\fR
+
+
+.sp
+Reads an entire netCDF variable (i.e. all the values).
+The netCDF dataset must be open and in data mode.  
+The data is converted from the external type of the specified variable,
+if necessary, to the type specified in the function name.  If conversion is
+not possible, an \fBNF_ERANGE\fR error is returned.
+.SH "WRITING AND READING ONE DATUM"
+.LP
+.HP
+\fBinteger function nf_put_var1_text(integer \fIncid\fP, integer \fIvarid\fP, integer \fIindex\fP(1), character*1 \fI*out\fP)\fR
+
+.HP
+\fBinteger function nf_put_var1_int1(integer \fIncid\fP, integer \fIvarid\fP, integer \fIindex\fP(1), integer*1 \fI*out\fP)\fR
+.HP
+\fBinteger function nf_put_var1_int2(integer \fIncid\fP, integer \fIvarid\fP, integer \fIindex\fP(1), integer*2 \fI*out\fP)\fR
+.HP
+\fBinteger function nf_put_var1_int(integer \fIncid\fP, integer \fIvarid\fP, integer \fIindex\fP(1), integer \fI*out\fP)\fR
+
+.HP
+\fBinteger function nf_put_var1_real(integer \fIncid\fP, integer \fIvarid\fP, integer \fIindex\fP(1), real \fI*out\fP)\fR
+.HP
+\fBinteger function nf_put_var1_double(integer \fIncid\fP, integer \fIvarid\fP, integer \fIindex\fP(1), doubleprecision \fI*out\fP)\fR
+.HP
+\fBinteger function nf_put_var1_ubyte(integer \fIncid\fP, integer \fIvarid\fP, integer \fIindex\fP(1), integer*1 \fI*out\fP)\fR
+.HP
+\fBinteger function nf_put_var1_ushort(integer \fIncid\fP, integer \fIvarid\fP, integer \fIindex\fP(1), integer*2 \fI*out\fP)\fR
+.HP
+\fBinteger function nf_put_var1_uint(integer \fIncid\fP, integer \fIvarid\fP, integer \fIindex\fP(1), integer*4 \fI*out\fP)\fR
+.HP
+\fBinteger function nf_put_var1_(integer \fIncid\fP, integer \fIvarid\fP, integer \fIindex\fP(1), integer*8 \fI*out\fP)\fR
+.HP
+\fBinteger function nf_put_var1_uint64(integer \fIncid\fP, integer \fIvarid\fP, integer \fIindex\fP(1), integer*8 \fI*out\fP)\fR
+.HP
+\fBinteger function nf_put_var1_string(integer \fIncid\fP, integer \fIvarid\fP, integer \fIindex\fP(1), character* \fI*out\fP)\fR
+
+
+.sp
+Puts a single data value into a variable at the position \fIindex\fP of an
+open netCDF dataset that is in data mode.  The type of the data is
+specified in the function name, and it is converted to the external type
+of the specified variable, if possible, otherwise an \fBNF_ERANGE\fR
+error is returned.
+.HP
+\fBinteger function nf_get_var1_text(integer \fIncid\fP, integer \fIvarid\fP, integer \fIindex\fP(1), character*1 \fIin\fP)\fR
+
+.HP
+\fBinteger function nf_get_var1_int1(integer \fIncid\fP, integer \fIvarid\fP, integer \fIindex\fP(1), integer*1 \fIin\fP)\fR
+.HP
+\fBinteger function nf_get_var1_int2(integer \fIncid\fP, integer \fIvarid\fP, integer \fIindex\fP(1), integer*2 \fIin\fP)\fR
+.HP
+\fBinteger function nf_get_var1_int(integer \fIncid\fP, integer \fIvarid\fP, integer \fIindex\fP(1), integer \fIin\fP)\fR
+
+.HP
+\fBinteger function nf_get_var1_real(integer \fIncid\fP, integer \fIvarid\fP, integer \fIindex\fP(1), real \fIin\fP)\fR
+.HP
+\fBinteger function nf_get_var1_double(integer \fIncid\fP, integer \fIvarid\fP, integer \fIindex\fP(1), doubleprecision \fIin\fP)\fR
+.HP
+\fBinteger function nf_get_var1_ubyte(integer \fIncid\fP, integer \fIvarid\fP, integer \fIindex\fP(1), integer*1 \fIin\fP)\fR
+.HP
+\fBinteger function nf_get_var1_ushort(integer \fIncid\fP, integer \fIvarid\fP, integer \fIindex\fP(1), integer*2 \fIin\fP)\fR
+.HP
+\fBinteger function nf_get_var1_uint(integer \fIncid\fP, integer \fIvarid\fP, integer \fIindex\fP(1), integer*4 \fIin\fP)\fR
+.HP
+\fBinteger function nf_get_var1_(integer \fIncid\fP, integer \fIvarid\fP, integer \fIindex\fP(1), integer*8 \fIin\fP)\fR
+.HP
+\fBinteger function nf_get_var1_uint64(integer \fIncid\fP, integer \fIvarid\fP, integer \fIindex\fP(1), integer*8 \fIin\fP)\fR
+.HP
+\fBinteger function nf_get_var1_string(integer \fIncid\fP, integer \fIvarid\fP, integer \fIindex\fP(1), character* \fIin\fP)\fR
+
+
+.sp
+Gets a single data value from a variable at the position \fIindex\fP
+of an open netCDF dataset that is in data mode.  
+The data is converted from the external type of the specified variable,
+if necessary, to the type specified in the function name.  If conversion is
+not possible, an \fBNF_ERANGE\fR error is returned.
+.SH "WRITING AND READING AN ARRAY"
+.LP
+.HP
+\fBinteger function nf_put_vara_text(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), character*(*) \fIout\fP)\fR
+
+.HP
+\fBinteger function nf_put_vara_int1(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer*1 \fIout\fP(1))\fR
+.HP
+\fBinteger function nf_put_vara_int2(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer*2 \fIout\fP(1))\fR
+.HP
+\fBinteger function nf_put_vara_int(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer \fIout\fP(1))\fR
+
+.HP
+\fBinteger function nf_put_vara_real(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), real \fIout\fP(1))\fR
+.HP
+\fBinteger function nf_put_vara_double(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), doubleprecision \fIout\fP(1))\fR
+.HP
+\fBinteger function nf_put_vara_ubyte(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer*1 \fIout\fP(1))\fR
+.HP
+\fBinteger function nf_put_vara_ushort(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer*2 \fIout\fP(1))\fR
+.HP
+\fBinteger function nf_put_vara_uint(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer*4 \fIout\fP(1))\fR
+.HP
+\fBinteger function nf_put_vara_(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer*8 \fIout\fP(1))\fR
+.HP
+\fBinteger function nf_put_vara_uint64(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer*8 \fIout\fP(1))\fR
+.HP
+\fBinteger function nf_put_vara_string(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), character* \fIout\fP(1))\fR
+
+
+.sp
+Writes an array section of values into a netCDF variable of an open
+netCDF dataset, which must be in data mode.  The array section is specified
+by the \fIstart\fP and \fIcount\fP vectors, which give the starting index
+and count of values along each dimension of the specified variable.
+The type of the data is
+specified in the function name and is converted to the external type
+of the specified variable, if possible, otherwise an \fBNF_ERANGE\fR
+error is returned.
+.HP
+\fBinteger function nf_get_vara_text(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), character*(*) \fIin\fP)\fR
+
+.HP
+\fBinteger function nf_get_vara_int1(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer*1 \fIin\fP(1))\fR
+.HP
+\fBinteger function nf_get_vara_int2(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer*2 \fIin\fP(1))\fR
+.HP
+\fBinteger function nf_get_vara_int(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer \fIin\fP(1))\fR
+
+.HP
+\fBinteger function nf_get_vara_real(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), real \fIin\fP(1))\fR
+.HP
+\fBinteger function nf_get_vara_double(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), doubleprecision \fIin\fP(1))\fR
+.HP
+\fBinteger function nf_get_vara_ubyte(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer*1 \fIin\fP(1))\fR
+.HP
+\fBinteger function nf_get_vara_ushort(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer*2 \fIin\fP(1))\fR
+.HP
+\fBinteger function nf_get_vara_uint(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer*4 \fIin\fP(1))\fR
+.HP
+\fBinteger function nf_get_vara_(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer*8 \fIin\fP(1))\fR
+.HP
+\fBinteger function nf_get_vara_uint64(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer*8 \fIin\fP(1))\fR
+.HP
+\fBinteger function nf_get_vara_string(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), character* \fIin\fP(1))\fR
+
+
+.sp
+Reads an array section of values from a netCDF variable of an open
+netCDF dataset, which must be in data mode.  The array section is specified
+by the \fIstart\fP and \fIcount\fP vectors, which give the starting index
+and count of values along each dimension of the specified variable.
+The data is converted from the external type of the specified variable,
+if necessary, to the type specified in the function name.  If conversion is
+not possible, an \fBNF_ERANGE\fR error is returned.
+.SH "WRITING AND READING A SLICED ARRAY"
+.LP
+.HP
+\fBinteger function nf_put_vars_text(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer \fIstride\fP(1), character*(*) \fIout\fP)\fR
+
+.HP
+\fBinteger function nf_put_vars_int1(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer \fIstride\fP(1), integer*1 \fIout\fP(1))\fR
+.HP
+\fBinteger function nf_put_vars_int2(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer \fIstride\fP(1), integer*2 \fIout\fP(1))\fR
+.HP
+\fBinteger function nf_put_vars_int(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer \fIstride\fP(1), integer \fIout\fP(1))\fR
+
+.HP
+\fBinteger function nf_put_vars_real(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer \fIstride\fP(1), real \fIout\fP(1))\fR
+.HP
+\fBinteger function nf_put_vars_double(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer \fIstride\fP(1), doubleprecision \fIout\fP(1))\fR
+.HP
+\fBinteger function nf_put_vars_ubyte(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer \fIstride\fP(1), integer*1 \fIout\fP(1))\fR
+.HP
+\fBinteger function nf_put_vars_ushort(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer \fIstride\fP(1), integer*2 \fIout\fP(1))\fR
+.HP
+\fBinteger function nf_put_vars_uint(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer \fIstride\fP(1), integer*4 \fIout\fP(1))\fR
+.HP
+\fBinteger function nf_put_vars_(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer \fIstride\fP(1), integer*8 \fIout\fP(1))\fR
+.HP
+\fBinteger function nf_put_vars_uint64(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer \fIstride\fP(1), integer*8 \fIout\fP(1))\fR
+.HP
+\fBinteger function nf_put_vars_string(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer \fIstride\fP(1), character* \fIout\fP(1))\fR
+
+
+.sp
+These functions are used for \fIstrided output\fP, which is like the
+array section output described above, except that
+the sampling stride (the interval between accessed values) is
+specified for each dimension.
+For an explanation of the sampling stride
+vector, see COMMON ARGUMENTS DESCRIPTIONS below.
+.HP
+\fBinteger function nf_get_vars_text(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer \fIstride\fP(1), character*(*) \fIin\fP)\fR
+
+.HP
+\fBinteger function nf_get_vars_int1(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer \fIstride\fP(1), integer*1 \fIin\fP(1))\fR
+.HP
+\fBinteger function nf_get_vars_int2(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer \fIstride\fP(1), integer*2 \fIin\fP(1))\fR
+.HP
+\fBinteger function nf_get_vars_int(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer \fIstride\fP(1), integer \fIin\fP(1))\fR
+
+.HP
+\fBinteger function nf_get_vars_real(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer \fIstride\fP(1), real \fIin\fP(1))\fR
+.HP
+\fBinteger function nf_get_vars_double(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer \fIstride\fP(1), doubleprecision \fIin\fP(1))\fR
+.HP
+\fBinteger function nf_get_vars_ubyte(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer \fIstride\fP(1), integer*1 \fIin\fP(1))\fR
+.HP
+\fBinteger function nf_get_vars_ushort(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer \fIstride\fP(1), integer*2 \fIin\fP(1))\fR
+.HP
+\fBinteger function nf_get_vars_uint(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer \fIstride\fP(1), integer*4 \fIin\fP(1))\fR
+.HP
+\fBinteger function nf_get_vars_(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer \fIstride\fP(1), integer*8 \fIin\fP(1))\fR
+.HP
+\fBinteger function nf_get_vars_uint64(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer \fIstride\fP(1), integer*8 \fIin\fP(1))\fR
+.HP
+\fBinteger function nf_get_vars_string(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer \fIstride\fP(1), character* \fIin\fP(1))\fR
+
+
+.sp
+These functions are used for \fIstrided input\fP, which is like the
+array section input described above, except that 
+the sampling stride (the interval between accessed values) is
+specified for each dimension.
+For an explanation of the sampling stride
+vector, see COMMON ARGUMENTS DESCRIPTIONS below.
+.SH "WRITING AND READING A MAPPED ARRAY"
+.LP
+.HP
+\fBinteger function nf_put_varm_text(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer \fIstride\fP(1), \fIimap\fP, character*(*) \fIout\fP)\fR
+
+.HP
+\fBinteger function nf_put_varm_int1(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer \fIstride\fP(1), \fIimap\fP, integer*1 \fIout\fP(1))\fR
+.HP
+\fBinteger function nf_put_varm_int2(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer \fIstride\fP(1), \fIimap\fP, integer*2 \fIout\fP(1))\fR
+.HP
+\fBinteger function nf_put_varm_int(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer \fIstride\fP(1), \fIimap\fP, integer \fIout\fP(1))\fR
+
+.HP
+\fBinteger function nf_put_varm_real(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer \fIstride\fP(1), \fIimap\fP, real \fIout\fP(1))\fR
+.HP
+\fBinteger function nf_put_varm_double(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer \fIstride\fP(1), \fIimap\fP, doubleprecision \fIout\fP(1))\fR
+.HP
+\fBinteger function nf_put_varm_ubyte(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer \fIstride\fP(1), \fIimap\fP, integer*1 \fIout\fP(1))\fR
+.HP
+\fBinteger function nf_put_varm_ushort(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer \fIstride\fP(1), \fIimap\fP, integer*2 \fIout\fP(1))\fR
+.HP
+\fBinteger function nf_put_varm_uint(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer \fIstride\fP(1), \fIimap\fP, integer*4 \fIout\fP(1))\fR
+.HP
+\fBinteger function nf_put_varm_(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer \fIstride\fP(1), \fIimap\fP, integer*8 \fIout\fP(1))\fR
+.HP
+\fBinteger function nf_put_varm_uint64(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer \fIstride\fP(1), \fIimap\fP, integer*8 \fIout\fP(1))\fR
+.HP
+\fBinteger function nf_put_varm_string(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer \fIstride\fP(1), \fIimap\fP, character* \fIout\fP(1))\fR
+
+
+.sp
+These functions are used for \fImapped output\fP, which is like
+strided output described above, except that an additional index mapping
+vector is provided to specify the in-memory arrangement of the data
+values.
+For an explanation of the index
+mapping vector, see COMMON ARGUMENTS DESCRIPTIONS below.
+.HP
+\fBinteger function nf_get_varm_text(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer \fIstride\fP(1), \fIimap\fP, character*(*) \fIin\fP)\fR
+
+.HP
+\fBinteger function nf_get_varm_int1(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer \fIstride\fP(1), \fIimap\fP, integer*1 \fIin\fP(1))\fR
+.HP
+\fBinteger function nf_get_varm_int2(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer \fIstride\fP(1), \fIimap\fP, integer*2 \fIin\fP(1))\fR
+.HP
+\fBinteger function nf_get_varm_int(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer \fIstride\fP(1), \fIimap\fP, integer \fIin\fP(1))\fR
+
+.HP
+\fBinteger function nf_get_varm_real(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer \fIstride\fP(1), \fIimap\fP, real \fIin\fP(1))\fR
+.HP
+\fBinteger function nf_get_varm_double(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer \fIstride\fP(1), \fIimap\fP, doubleprecision \fIin\fP(1))\fR
+.HP
+\fBinteger function nf_get_varm_ubyte(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer \fIstride\fP(1), \fIimap\fP, integer*1 \fIin\fP(1))\fR
+.HP
+\fBinteger function nf_get_varm_ushort(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer \fIstride\fP(1), \fIimap\fP, integer*2 \fIin\fP(1))\fR
+.HP
+\fBinteger function nf_get_varm_uint(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer \fIstride\fP(1), \fIimap\fP, integer*4 \fIin\fP(1))\fR
+.HP
+\fBinteger function nf_get_varm_(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer \fIstride\fP(1), \fIimap\fP, integer*8 \fIin\fP(1))\fR
+.HP
+\fBinteger function nf_get_varm_uint64(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer \fIstride\fP(1), \fIimap\fP, integer*8 \fIin\fP(1))\fR
+.HP
+\fBinteger function nf_get_varm_string(integer \fIncid\fP, integer \fIvarid\fP, integer \fIstart\fP(1), integer \fIcount\fP(1), integer \fIstride\fP(1), \fIimap\fP, character* \fIin\fP(1))\fR
+
+
+.sp
+These functions are used for \fImapped input\fP, which is like
+strided input described above, except that an additional index mapping
+vector is provided to specify the in-memory arrangement of the data
+values.
+For an explanation of the index
+mapping vector, see COMMON ARGUMENTS DESCRIPTIONS below.
+.SH "ATTRIBUTES"
+.LP
+.HP
+\fBinteger function nf_put_att_text(integer \fIncid\fP, integer \fIvarid\fP, character*(*) \fIname\fP, integer \fIxtype\fP, integer \fIlen\fP, character*(*) \fIout\fP)\fR
+
+.HP
+\fBinteger function nf_put_att_int1(integer \fIncid\fP, integer \fIvarid\fP, character*(*) \fIname\fP, integer \fIxtype\fP, integer \fIlen\fP, integer*1 \fIout\fP(1))\fR
+.HP
+\fBinteger function nf_put_att_int2(integer \fIncid\fP, integer \fIvarid\fP, character*(*) \fIname\fP, integer \fIxtype\fP, integer \fIlen\fP, integer*2 \fIout\fP(1))\fR
+.HP
+\fBinteger function nf_put_att_int(integer \fIncid\fP, integer \fIvarid\fP, character*(*) \fIname\fP, integer \fIxtype\fP, integer \fIlen\fP, integer \fIout\fP(1))\fR
+
+.HP
+\fBinteger function nf_put_att_real(integer \fIncid\fP, integer \fIvarid\fP, character*(*) \fIname\fP, integer \fIxtype\fP, integer \fIlen\fP, real \fIout\fP(1))\fR
+.HP
+\fBinteger function nf_put_att_double(integer \fIncid\fP, integer \fIvarid\fP, character*(*) \fIname\fP, integer \fIxtype\fP, integer \fIlen\fP, doubleprecision \fIout\fP(1))\fR
+.HP
+\fBinteger function nf_put_att_ubyte(integer \fIncid\fP, integer \fIvarid\fP, character*(*) \fIname\fP, integer \fIxtype\fP, integer \fIlen\fP, integer*1 \fIout\fP(1))\fR
+.HP
+\fBinteger function nf_put_att_ushort(integer \fIncid\fP, integer \fIvarid\fP, character*(*) \fIname\fP, integer \fIxtype\fP, integer \fIlen\fP, integer*2 \fIout\fP(1))\fR
+.HP
+\fBinteger function nf_put_att_uint(integer \fIncid\fP, integer \fIvarid\fP, character*(*) \fIname\fP, integer \fIxtype\fP, integer \fIlen\fP, integer*4 \fIout\fP(1))\fR
+.HP
+\fBinteger function nf_put_att_(integer \fIncid\fP, integer \fIvarid\fP, character*(*) \fIname\fP, integer \fIxtype\fP, integer \fIlen\fP, integer*8 \fIout\fP(1))\fR
+.HP
+\fBinteger function nf_put_att_uint64(integer \fIncid\fP, integer \fIvarid\fP, character*(*) \fIname\fP, integer \fIxtype\fP, integer \fIlen\fP, integer*8 \fIout\fP(1))\fR
+.HP
+\fBinteger function nf_put_att_string(integer \fIncid\fP, integer \fIvarid\fP, character*(*) \fIname\fP, integer \fIxtype\fP, integer \fIlen\fP, character* \fIout\fP(1))\fR
+
+
+.HP
+\fBinteger function nf_put_att(integer \fIncid\fP, integer \fIvarid\fP, character*(*) \fIname\fP, integer \fIxtype\fP, integer \fIlen\fP, void * \fIip\fP)\fR
+.HP
+\fBinteger function nf_get_att(integer \fIncid\fP, integer \fIvarid\fP, character*(*) \fIname\fP, void * \fIip\fP)\fR
+.sp
+Unlike variables, attributes do not have 
+separate functions for defining and writing values.
+This family of functions defines a new attribute with a value or changes
+the value of an existing attribute.
+If the attribute is new, or if the space required to
+store the attribute value is greater than before,
+the netCDF dataset must be in define mode.
+The parameter \fIlen\fP is the number of values from \fIout\fP to transfer.
+It is often one, except that for
+\fBnf_put_att_text(\|)\fR it will usually be
+\fBlen_trim(\fIout\fP)\fR.
+.sp
+For these functions, the type component of the function name refers to
+the in-memory type of the value, whereas the \fIxtype\fP argument refers to the
+external type for storing the value.  An \fBNF_ERANGE\fR
+error results if
+a conversion between these types is not possible.  In this case the value
+is represented with the appropriate fill-value for the associated 
+external type.
+.HP
+\fBinteger function nf_inq_attname(integer \fIncid\fP, integer \fIvarid\fP, integer \fIattnum\fP, character*(*) \fIname\fP)\fR
+.sp
+Gets the
+name of an attribute, given its variable ID and attribute number.
+This function is useful in generic applications that
+need to get the names of all the attributes associated with a variable,
+since attributes are accessed by name rather than number in all other
+attribute functions.  The number of an attribute is more volatile than
+the name, since it can change when other attributes of the same variable
+are deleted.  The attributes for each variable are numbered
+from 1 (the first attribute) to
+\fInvatts\fP,
+where \fInvatts\fP is
+the number of attributes for the variable, as returned from a call to
+\fBnf_inq_varnatts(\|)\fR.
+
+.HP
+\fBinteger function nf_inq_att(integer \fIncid\fP, integer \fIvarid\fP, character*(*) \fIname\fP, integer \fIxtype\fP, integer \fIlen\fP)\fR
+.HP
+\fBinteger function nf_inq_attid(integer \fIncid\fP, integer \fIvarid\fP, character*(*) \fIname\fP, integer \fIattnum\fP)\fR
+.HP
+\fBinteger function nf_inq_atttype(integer \fIncid\fP, integer \fIvarid\fP, character*(*) \fIname\fP, integer \fIxtype\fP)\fR
+.HP
+\fBinteger function nf_inq_attlen(integer \fIncid\fP, integer \fIvarid\fP, character*(*) \fIname\fP, integer \fIlen\fP)\fR
+.sp
+These functions return information about a netCDF attribute,
+given its variable ID and name.  The information returned is the
+external type in \fIxtype\fP
+and the number of elements in the attribute as \fIlen\fP.
+
+.HP
+\fBinteger function nf_copy_att(integer \fIncid\fP, integer \fIvarid_in\fP, character*(*) \fIname\fP, integer \fIncid_out\fP, integer \fIvarid_out\fP)\fR
+.sp
+Copies an
+attribute from one netCDF dataset to another.  It can also be used to
+copy an attribute from one variable to another within the same netCDF.
+\fIncid_in\fP is the netCDF ID of an input netCDF dataset from which the
+attribute will be copied.
+\fIvarid_in\fP
+is the ID of the variable in the input netCDF dataset from which the
+attribute will be copied, or \fBNF_GLOBAL\fR
+for a global attribute.
+\fIname\fP
+is the name of the attribute in the input netCDF dataset to be copied.
+\fIncid_out\fP
+is the netCDF ID of the output netCDF dataset to which the attribute will be 
+copied.
+It is permissible for the input and output netCDF ID's to be the same.  The
+output netCDF dataset should be in define mode if the attribute to be
+copied does not already exist for the target variable, or if it would
+cause an existing target attribute to grow.
+\fIvarid_out\fP
+is the ID of the variable in the output netCDF dataset to which the attribute will
+be copied, or \fBNF_GLOBAL\fR to copy to a global attribute.
+.HP
+\fBinteger function nf_rename_att(integer \fIncid\fP, integer \fIvarid\fP, character*(*) \fIname\fP, character*(*) \fInewname\fP)\fR
+.sp
+Changes the
+name of an attribute.  If the new name is longer than the original name,
+the netCDF must be in define mode.  You cannot rename an attribute to
+have the same name as another attribute of the same variable.
+\fIname\fP is the original attribute name.
+\fInewname\fP
+is the new name to be assigned to the specified attribute.  If the new name
+is longer than the old name, the netCDF dataset must be in define mode.
+.HP
+\fBinteger function nf_del_att(integer \fIncid\fP, integer \fIvarid\fP, character*(*) \fIname\fP)\fR
+.sp
+Deletes an attribute from a netCDF dataset.  The dataset must be in
+define mode.
+.HP
+\fBinteger function nf_get_att_text(integer \fIncid\fP, integer \fIvarid\fP, character*(*) \fIname\fP, character*(*) \fIin\fP)\fR
+
+.HP
+\fBinteger function nf_get_att_int1(integer \fIncid\fP, integer \fIvarid\fP, character*(*) \fIname\fP, integer*1 \fIin\fP(1))\fR
+.HP
+\fBinteger function nf_get_att_int2(integer \fIncid\fP, integer \fIvarid\fP, character*(*) \fIname\fP, integer*2 \fIin\fP(1))\fR
+.HP
+\fBinteger function nf_get_att_int(integer \fIncid\fP, integer \fIvarid\fP, character*(*) \fIname\fP, integer \fIin\fP(1))\fR
+
+.HP
+\fBinteger function nf_get_att_real(integer \fIncid\fP, integer \fIvarid\fP, character*(*) \fIname\fP, real \fIin\fP(1))\fR
+.HP
+\fBinteger function nf_get_att_double(integer \fIncid\fP, integer \fIvarid\fP, character*(*) \fIname\fP, doubleprecision \fIin\fP(1))\fR
+.HP
+\fBinteger function nf_get_att_ubyte(integer \fIncid\fP, integer \fIvarid\fP, character*(*) \fIname\fP, integer*1 \fIin\fP(1))\fR
+.HP
+\fBinteger function nf_get_att_ushort(integer \fIncid\fP, integer \fIvarid\fP, character*(*) \fIname\fP, integer*2 \fIin\fP(1))\fR
+.HP
+\fBinteger function nf_get_att_uint(integer \fIncid\fP, integer \fIvarid\fP, character*(*) \fIname\fP, integer*4 \fIin\fP(1))\fR
+.HP
+\fBinteger function nf_get_att_(integer \fIncid\fP, integer \fIvarid\fP, character*(*) \fIname\fP, integer*8 \fIin\fP(1))\fR
+.HP
+\fBinteger function nf_get_att_uint64(integer \fIncid\fP, integer \fIvarid\fP, character*(*) \fIname\fP, integer*8 \fIin\fP(1))\fR
+.HP
+\fBinteger function nf_get_att_string(integer \fIncid\fP, integer \fIvarid\fP, character*(*) \fIname\fP, character* \fIin\fP(1))\fR
+
+
+.sp
+Gets the value(s) of a netCDF attribute, given its
+variable ID and name.  Converts from the external type to the type
+specified in
+the function name, if possible, otherwise returns an \fBNF_ERANGE\fR
+error.
+All elements of the vector of attribute
+values are returned, so you must allocate enough space to hold
+them.  If you don't know how much space to reserve, call
+\fBnf_inq_attlen(\|)\fR
+first to find out the length of the attribute.
+.SH "COMMON ARGUMENT DESCRIPTIONS"
+.LP
+In this section we define some common arguments which are used in the 
+"FUNCTION DESCRIPTIONS" section.
+.TP
+integer \fIncid\fP
+is the netCDF ID returned from a previous, successful call to
+\fBnf_open(\|)\fR or \fBnf_create(\|)\fR
+.TP
+character*(*) \fIname\fP
+is the name of a dimension, variable, or attribute. The names of 
+dimensions, variables and attributes consist of arbitrary
+sequences of alphanumeric characters (as well as underscore '_',
+period '.' and hyphen '-'), beginning with a letter or
+underscore. (However names commencing with underscore are reserved for
+system use.) Case is significant in netCDF names. A zero-length name
+is not allowed.
+
+The maximum allowable number of characters 
+ is \fBNF_MAX_NAME\fR.
+.TP
+integer \fIxtype\fP
+specifies the external data type of a netCDF variable or attribute and
+is one of the following:
+\fBNF_BYTE\fR, \fBNF_CHAR\fR, \fBNF_SHORT\fR, \fBNF_INT\fR, 
+\fBNF_FLOAT\fR, or \fBNF_DOUBLE\fR.
+These are used to specify 8-bit integers,
+characters, 16-bit integers, 32-bit integers, 32-bit IEEE floating point
+numbers, and 64-bit IEEE floating-point numbers, respectively.
+
+.TP
+integer \fIdimids\fP(1)
+is a vector of dimension ID's and defines the shape of a netCDF variable.
+The size of the vector shall be greater than or equal to the
+rank (i.e. the number of dimensions) of the variable (\fIndims\fP).
+The vector shall be ordered by the speed with which a dimension varies:
+\fIdimids\fP(1)
+shall be the dimension ID of the most rapidly
+varying dimension and
+\fIdimids\fP(\fIndims\fP)
+shall be the dimension ID of the most slowly
+varying dimension.
+The maximum possible number of
+dimensions for a variable is given by the symbolic constant
+\fBNF_MAX_VAR_DIMS\fR.
+.TP
+integer \fIdimid\fP
+is the ID of a netCDF dimension.
+netCDF dimension ID's are allocated sequentially from the 
+positive
+integers beginning with 1.
+.TP
+integer \fIndims\fP
+is either the total number of dimensions in a netCDF dataset or the rank
+(i.e. the number of dimensions) of a netCDF variable.
+The value shall not be negative or greater than the symbolic constant 
+\fBNF_MAX_VAR_DIMS\fR.
+.TP
+integer \fIvarid\fP
+is the ID of a netCDF variable or (for the attribute-access functions) 
+the symbolic constant
+\fBNF_GLOBAL\fR,
+which is used to reference global attributes.
+netCDF variable ID's are allocated sequentially from the 
+positive
+integers beginning with 1.
+.TP
+integer \fInatts\fP
+is the number of global attributes in a netCDF dataset  for the
+\fBnf_inquire(\|)\fR
+function or the number
+of attributes associated with a netCDF variable for the
+\fBnf_varinq(\|)\fR
+function.
+.TP
+integer \fIindex\fP(1)
+specifies the indicial coordinates of the netCDF data value to be accessed.
+The indices start at 1;
+thus, for example, the first data value of a
+two-dimensional variable is (1,1).
+The size of the vector shall be at least the rank of the associated
+netCDF variable and its elements shall correspond, in order, to the
+variable's dimensions.
+.TP
+integer \fIstart\fP(1)
+specifies the starting point
+for accessing a netCDF variable's data values
+in terms of the indicial coordinates of 
+the corner of the array section.
+The indices start at 1;
+thus, the first data
+value of a variable is (1, 1, ..., 1).
+The size of the vector shall be at least the rank of the associated
+netCDF variable and its elements shall correspond, in order, to the
+variable's dimensions.
+.TP
+integer \fIcount\fP(1)
+specifies the number of indices selected along each dimension of the
+array section.
+Thus, to access a single value, for example, specify \fIcount\fP as
+(1, 1, ..., 1).
+Note that, for strided I/O, this argument must be adjusted
+to be compatible with the \fIstride\fP and \fIstart\fP arguments so that 
+the interaction of the
+three does not attempt to access an invalid data co-ordinate.
+The elements of the
+\fIcount\fP vector correspond, in order, to the variable's dimensions.
+.TP
+integer \fIstride\fP(1)
+specifies the sampling interval along each dimension of the netCDF
+variable.   The elements of the stride vector correspond, in order,
+to the netCDF variable's dimensions (\fIstride\fP(1))
+gives the sampling interval along the most rapidly 
+varying dimension of the netCDF variable).  Sampling intervals are
+specified in type-independent units of elements (a value of 1 selects
+consecutive elements of the netCDF variable along the corresponding
+dimension, a value of 2 selects every other element, etc.).
+
+.TP
+\fIimap\fP
+specifies the mapping between the dimensions of a netCDF variable and
+the in-memory structure of the internal data array.  The elements of
+the index mapping vector correspond, in order, to the netCDF variable's
+dimensions (\fIimap\fP(1) gives the distance
+between elements of the internal array corresponding to the most
+rapidly varying dimension of the netCDF variable).
+Distances between elements are specified in type-independent units of
+elements (the distance between internal elements that occupy adjacent
+memory locations is 1 and not the element's byte-length as in netCDF 2).
+
+.SH "VARIABLE PREFILLING"
+.LP
+By default, the netCDF interface sets the values of
+all newly-defined variables of finite length (i.e. those that do not have
+an unlimited, dimension) to the type-dependent fill-value associated with each 
+variable.  This is done when \fBnf_enddef(\|)\fR
+is called.  The
+fill-value for a variable may be changed from the default value by
+defining the attribute `\fB_FillValue\fR' for the variable.  This
+attribute must have the same type as the variable and be of length one.
+.LP
+Variables with an unlimited dimension are also prefilled, but on
+an `as needed' basis.  For example, if the first write of such a
+variable is to position 5, then
+positions
+1 through 4
+(and no others)
+would be set to the fill-value at the same time.
+.LP
+This default prefilling of data values may be disabled by
+or'ing the
+\fBNF_NOFILL\fR
+flag into the mode parameter of \fBnf_open(\|)\fR or \fBnf_create(\|)\fR,
+or, by calling the function \fBnf_set_fill(\|)\fR
+with the argument \fBNF_NOFILL\fR.
+For variables that do not use the unlimited dimension,
+this call must
+be made before
+\fBnf_enddef(\|)\fR.
+For variables that
+use the unlimited dimension, this call
+may be made at any time.
+.LP
+One can obtain increased performance of the netCDF interface by using 
+this feature, but only at the expense of requiring the application to set
+every single data value.  The performance
+enhancing behavior of this function is dependent on the particulars of
+the implementation and dataset format.
+The flag value controlled by \fBnf_set_fill(\|)\fR
+is per netCDF ID,
+not per variable or per write. 
+Allowing this to change affects the degree to which
+a program can be effectively parallelized.
+Given all of this, we state that the use
+of this feature may not be available (or even needed) in future
+releases. Programmers are cautioned against heavy reliance upon this
+feature.
+.HP
+\fBinteger function nf_setfill(integer \fIncid\fP, integer \fIfillmode\fP, integer \fIold_fillemode\fP)\fR
+
+.sp
+Determines whether or not variable prefilling will be done (see 
+above).
+The netCDF dataset shall be writable.
+\fIfillmode\fP is either \fBNF_FILL\fR
+to enable prefilling (the
+default) or \fBNF_NOFILL\fR
+to disable prefilling.
+This function returns the previous setting in \fIold_fillmode\fP.
+
+.HP
+.SH "MPP FUNCTION DESCRIPTIONS"
+.LP
+Additional functions for use on SGI/Cray MPP machines (_CRAYMPP).
+These are used to set and inquire which PE is the base for MPP
+for a particular netCDF. These are only relevant when
+using the SGI/Cray ``global''
+Flexible File I/O layer and desire to have
+only a subset of PEs to open the specific netCDF file.
+For technical reasons, these functions are available on all platforms.
+On a platform other than SGI/Cray MPP, it is as if
+only processor available were processor 0.
+.LP
+To use this feature, you need to specify a communicator group and call
+\fBglio_group_mpi(\|)\fR or \fBglio_group_shmem(\|)\fR prior to the netCDF
+\fBnf_open(\|)\fR and \fBnf_create(\|)\fR calls.
+.HP
+\fBinteger function nf__create_mp(character*(*) \fIpath\fP, integer \fIcmode\fP, integer \fIinitialsize\fP, integer \fIpe\fP, integer \fIchunksize\fP, integer \fIncid\fP)\fR
+.sp
+Like \fBnf__create(\|)\fR but allows the base PE to be set.
+.sp
+The argument \fIpe\fP sets the base PE at creation time. In the MPP
+environment, \fBnf__create(\|)\fR and \fBnf_create(\|)\fR set the base PE to processor
+zero by default.
+.HP
+\fBinteger function nf__open_mp(character*(*) \fIpath\fP, integer \fImode\fP, integer \fIpe\fP, integer \fIchunksize\fP, integer \fIncid\fP)\fR
+.sp
+Like \fBnf__open(\|)\fR but allows the base PE to be set.
+The argument \fIpe\fP sets the base PE at creation time. In the MPP
+environment, \fBnf__open(\|)\fR and \fBnf_open(\|)\fR set the base PE to processor
+zero by default.
+.HP
+\fBinteger function nf_inq_base_pe(integer \fIncid\fP, integer \fIpe\fP)\fR
+.sp
+Inquires of the netCDF dataset which PE is being used as the base for MPP use.
+This is safe to use at any time.
+.HP
+\fBinteger function nf_set_base_pe(integer \fIncid\fP, integer \fIpe\fP)\fR
+.sp
+Resets the base PE for the netCDF dataset.
+Only perform this operation when the affected communicator group
+synchronizes before and after the call.
+This operation is very risky and should only be contemplated
+under only the most extreme cases.
+.SH "ENVIRONMENT VARIABLES"
+.TP 4
+.B NETCDF_FFIOSPEC
+Specifies the Flexible File I/O buffers for netCDF I/O when executing
+under the UNICOS operating system (the variable is ignored on other
+operating systems).
+An appropriate specification can greatly increase the efficiency of 
+netCDF I/O -- to the extent that it can actually surpass FORTRAN binary 
+I/O.
+This environment variable has been made a little more generalized,
+such that other FFIO option specifications can now be added.
+The default specification is \fBbufa:336:2\fP,
+unless a current FFIO specification is in operation,
+which will be honored.
+See UNICOS Flexible File I/O for more information.
+.SH "MAILING-LISTS"
+.LP
+Both a mailing list and a digest are available for
+discussion of the netCDF interface and announcements about netCDF bugs,
+fixes, and enhancements.
+To begin or change your subscription to either the mailing-list or the
+digest, send one of the following in the body (not
+the subject line) of an email message to "majordomo@unidata.ucar.edu".
+Use your email address in place of \fIjdoe@host.inst.domain\fP.
+.sp
+To subscribe to the netCDF mailing list:
+.RS
+\fBsubscribe netcdfgroup \fIjdoe@host.inst.domain\fR
+.RE
+To unsubscribe from the netCDF mailing list:
+.RS
+\fBunsubscribe netcdfgroup \fIjdoe@host.inst.domain\fR
+.RE
+To subscribe to the netCDF digest:
+.RS
+\fBsubscribe netcdfdigest \fIjdoe@host.inst.domain\fR
+.RE
+To unsubscribe from the netCDF digest:
+.RS
+\fBunsubscribe netcdfdigest \fIjdoe@host.inst.domain\fR
+.RE
+To retrieve the general introductory information for the mailing list:
+.RS
+\fBinfo netcdfgroup\fR
+.RE
+To get a synopsis of other majordomo commands:
+.RS
+\fBhelp\fR
+.RE
+.SH "SEE ALSO"
+.LP
+.BR ncdump (1),
+.BR ncgen (1),
+.BR netcdf (3f).
+.LP
+\fInetCDF User's Guide\fP, published
+by the Unidata Program Center, University Corporation for Atmospheric
+Research, located in Boulder, Colorado.
+
+NetCDF home page at http:/www.unidata.ucar.edu/netcdf.
diff --git a/privatemodules/nc4/share/man/man3/zlib.3 b/privatemodules/nc4/share/man/man3/zlib.3
new file mode 100644
index 0000000000000000000000000000000000000000..0160e62b69f419e1eb903cf1d323c07e1ec19936
--- /dev/null
+++ b/privatemodules/nc4/share/man/man3/zlib.3
@@ -0,0 +1,151 @@
+.TH ZLIB 3 "28 Apr 2013"
+.SH NAME
+zlib \- compression/decompression library
+.SH SYNOPSIS
+[see
+.I zlib.h
+for full description]
+.SH DESCRIPTION
+The
+.I zlib
+library is a general purpose data compression library.
+The code is thread safe, assuming that the standard library functions
+used are thread safe, such as memory allocation routines.
+It provides in-memory compression and decompression functions,
+including integrity checks of the uncompressed data.
+This version of the library supports only one compression method (deflation)
+but other algorithms may be added later
+with the same stream interface.
+.LP
+Compression can be done in a single step if the buffers are large enough
+or can be done by repeated calls of the compression function.
+In the latter case,
+the application must provide more input and/or consume the output
+(providing more output space) before each call.
+.LP
+The library also supports reading and writing files in
+.IR gzip (1)
+(.gz) format
+with an interface similar to that of stdio.
+.LP
+The library does not install any signal handler.
+The decoder checks the consistency of the compressed data,
+so the library should never crash even in the case of corrupted input.
+.LP
+All functions of the compression library are documented in the file
+.IR zlib.h .
+The distribution source includes examples of use of the library
+in the files
+.I test/example.c
+and
+.IR test/minigzip.c,
+as well as other examples in the
+.IR examples/
+directory.
+.LP
+Changes to this version are documented in the file
+.I ChangeLog
+that accompanies the source.
+.LP
+.I zlib
+is available in Java using the java.util.zip package:
+.IP
+http://java.sun.com/developer/technicalArticles/Programming/compression/
+.LP
+A Perl interface to
+.IR zlib ,
+written by Paul Marquess (pmqs@cpan.org),
+is available at CPAN (Comprehensive Perl Archive Network) sites,
+including:
+.IP
+http://search.cpan.org/~pmqs/IO-Compress-Zlib/
+.LP
+A Python interface to
+.IR zlib ,
+written by A.M. Kuchling (amk@magnet.com),
+is available in Python 1.5 and later versions:
+.IP
+http://docs.python.org/library/zlib.html
+.LP
+.I zlib
+is built into
+.IR tcl:
+.IP
+http://wiki.tcl.tk/4610
+.LP
+An experimental package to read and write files in .zip format,
+written on top of
+.I zlib
+by Gilles Vollant (info@winimage.com),
+is available at:
+.IP
+http://www.winimage.com/zLibDll/minizip.html
+and also in the
+.I contrib/minizip
+directory of the main
+.I zlib
+source distribution.
+.SH "SEE ALSO"
+The
+.I zlib
+web site can be found at:
+.IP
+http://zlib.net/
+.LP
+The data format used by the zlib library is described by RFC
+(Request for Comments) 1950 to 1952 in the files:
+.IP
+http://tools.ietf.org/html/rfc1950 (for the zlib header and trailer format)
+.br
+http://tools.ietf.org/html/rfc1951 (for the deflate compressed data format)
+.br
+http://tools.ietf.org/html/rfc1952 (for the gzip header and trailer format)
+.LP
+Mark Nelson wrote an article about
+.I zlib
+for the Jan. 1997 issue of  Dr. Dobb's Journal;
+a copy of the article is available at:
+.IP
+http://marknelson.us/1997/01/01/zlib-engine/
+.SH "REPORTING PROBLEMS"
+Before reporting a problem,
+please check the
+.I zlib
+web site to verify that you have the latest version of
+.IR zlib ;
+otherwise,
+obtain the latest version and see if the problem still exists.
+Please read the
+.I zlib
+FAQ at:
+.IP
+http://zlib.net/zlib_faq.html
+.LP
+before asking for help.
+Send questions and/or comments to zlib@gzip.org,
+or (for the Windows DLL version) to Gilles Vollant (info@winimage.com).
+.SH AUTHORS
+Version 1.2.8
+Copyright (C) 1995-2013 Jean-loup Gailly (jloup@gzip.org)
+and Mark Adler (madler@alumni.caltech.edu).
+.LP
+This software is provided "as-is,"
+without any express or implied warranty.
+In no event will the authors be held liable for any damages
+arising from the use of this software.
+See the distribution directory with respect to requirements
+governing redistribution.
+The deflate format used by
+.I zlib
+was defined by Phil Katz.
+The deflate and
+.I zlib
+specifications were written by L. Peter Deutsch.
+Thanks to all the people who reported problems and suggested various
+improvements in
+.IR zlib ;
+who are too numerous to cite here.
+.LP
+UNIX manual page by R. P. C. Rodgers,
+U.S. National Library of Medicine (rodgers@nlm.nih.gov).
+.\" end of man page
diff --git a/privatemodules/null b/privatemodules/null
new file mode 100644
index 0000000000000000000000000000000000000000..892eb49719b9f0a176e75befb4a19dc56481077d
--- /dev/null
+++ b/privatemodules/null
@@ -0,0 +1,19 @@
+#%Module########################################################################
+##
+## null modulefile
+##
+proc ModulesHelp { } {
+        global version
+
+        puts stderr "	This module does absolutely nothing."
+        puts stderr "	It's meant simply as a place holder in your"
+	puts stderr "	dot file initialization."
+        puts stderr "
+	Version $version
+"
+}
+
+module-whatis	"does absolutely nothing"
+
+# for Tcl script use only
+set     version      3.2.10
diff --git a/privatemodules/python/wp b/privatemodules/python/wp
new file mode 100644
index 0000000000000000000000000000000000000000..a6d8c8a98ca072762a9ecab66b18386ecbf7c6b9
--- /dev/null
+++ b/privatemodules/python/wp
@@ -0,0 +1,17 @@
+#%Module######################################
+# note that this is read by a Tcl interpretor
+#
+proc ModulesHelp { } {
+}
+
+module-whatis "loads the environment for python2.7"
+
+set pyver 2.7.5
+
+# These two conflict because MacPorts makes gcc libraries available for dynamic linking
+
+module load python/$pyver
+conflict python/2.7.8
+
+set-alias "ipy" "ipython --pylab"
+
diff --git a/privatemodules/tm5/mpi b/privatemodules/tm5/mpi
new file mode 100644
index 0000000000000000000000000000000000000000..eff9b2865a44ed257395e03477e1c93ebec6adbe
--- /dev/null
+++ b/privatemodules/tm5/mpi
@@ -0,0 +1,54 @@
+#%Module######################################
+# note that this is read by a Tcl interpretor
+#
+
+module-whatis "loads the Intel Compiler + MPI environment for use with TM5 parallel"
+
+set iccver [module-info version icc]
+set ifortver [module-info version ifort]
+
+set mod_intel fortran/intel/14.0.2
+set mod_hdf4 hdf4/intel/4.2.9
+set mod_szip szip/intel
+set mod_hdf5 hdf5/serial/intel/1.8.10-patch1
+set mod_cdf netcdf/impi/intel/4.1.3
+set mod_cdff netcdf-fortran/serial/intel
+set mod_hdf5_par hdf5/impi/intel/1.8.9
+#set mod_cdf_par netcdf-c/impi/intel/4.3.1.1
+#set mod_cdff_par netcdf-fortran/impi/intel
+setenv SURFSARA_NETCDFC_ROOT /hpc/sw/netcdf-4.1.3-intel-impi-par/
+setenv SURFSARA_NETCDFC_INCLUDE /hpc/sw/netcdf-4.1.3-intel-impi-par/include/
+setenv SURFSARA_NETCDFC_LIB /hpc/sw/netcdf-4.1.3-intel-impi-par/lib/
+setenv SURFSARA_NETCDFF_ROOT /hpc/sw/netcdf-4.1.3-intel-impi-par/
+setenv SURFSARA_NETCDFF_INCLUDE /hpc/sw/netcdf-4.1.3-intel-impi-par/include/
+setenv SURFSARA_NETCDFF_LIB /hpc/sw/netcdf-4.1.3-intel-impi-par/lib/
+
+if { [ expr [module-info mode load] || [module-info mode display] || [module-info mode switch] ] } {
+	module load $mod_intel
+	module load $mod_hdf4
+
+        if [ is-loaded $mod_cdf ] {
+	module unload $mod_cdf
+}
+
+        if [ is-loaded $mod_hdf5 ] {
+	module unload $mod_hdf5 
+}
+
+module load $mod_szip
+module load $mod_hdf5_par
+#module load $mod_cdff_par
+#module load $mod_cdf_par
+setenv UDUNITS_PATH /home/ivdvelde/local/udunits/etc/udunits.dat
+prepend-path PATH /home/ivdvelde/local
+
+}
+
+if [ module-info mode remove ] {
+	module del $mod_intel
+	module del $mod_hdf4
+	module del $mod_szip
+	module del $mod_hdf5_par
+	#module del $mod_cdf_par
+	#module del $mod_cdff_par
+}
diff --git a/privatemodules/tm5/serial b/privatemodules/tm5/serial
new file mode 100644
index 0000000000000000000000000000000000000000..c57e98483abd80dd881404c63b37656fcbbeb341
--- /dev/null
+++ b/privatemodules/tm5/serial
@@ -0,0 +1,49 @@
+#%Module######################################
+# note that this is read by a Tcl interpretor
+#
+
+module-whatis "loads the Intel Compiler environment for use with TM5 in serial mode"
+
+set iccver [module-info version icc]
+set ifortver [module-info version ifort]
+
+set mod_intel fortran/intel/14.0.2
+set mod_hdf4 hdf4/intel/4.2.9
+set mod_szip szip/intel
+#set mod_hdf5 hdf5/serial/intel
+set mod_hdf5 hdf5/serial/intel/1.8.10-patch1
+set mod_cdf netcdf/serial/intel/4.1.3
+set mod_cdff netcdf-fortran/serial/intel
+#set mod_hdf5_par hdf5/impi/intel
+set mod_hdf5_par hdf5/impi/intel/1.8.10-patch1
+set mod_cdf_par netcdf/impi/intel
+
+if { [ expr [module-info mode load] || [module-info mode display] || [module-info mode switch] ] } {
+	module load $mod_intel
+	module load $mod_hdf4
+        if [ is-loaded $mod_cdf_par ] {
+	module unload $mod_cdf_par 
+} 
+       
+        if [ is-loaded $mod_hdf5_par ] {
+	module unload $mod_hdf5_par 
+} 
+    module unload python
+	module load $mod_szip
+    module load $mod_hdf5
+    module load $mod_cdf
+    module load $mod_cdff
+	module load python/wp
+    setenv UDUNITS_PATH /home/ivdvelde/local/udunits/etc/udunits.dat
+    prepend-path PATH /home/ivdvelde/local
+}
+
+if [ module-info mode remove ] {
+	module del $mod_intel
+	module del $mod_cdf
+	module del $mod_cdff
+	module del $mod_hdf4
+	module del $mod_szip
+	module del $mod_hdf5
+	module del python/wp
+}
diff --git a/sib4v2 b/sib4v2
new file mode 160000
index 0000000000000000000000000000000000000000..ecdb7f22918de1252ae129e454781371110b9ac1
--- /dev/null
+++ b/sib4v2
@@ -0,0 +1 @@
+Subproject commit ecdb7f22918de1252ae129e454781371110b9ac1